注册 登录
编程论坛 VFP论坛

关于把表单输出到PRG的实现探讨

厨师王德榜 发布于 2021-08-09 15:27, 7717 次点击
说明
【缘起】

多数人(包括我自己)在写程序界面的时候,喜欢用表单设计器,毕竟它所见即所得,需要什么控件,直接拖上去就OK,简单快捷,让我们有更多的时间,专注业务本身的逻辑。毕竟,所见即所得,这是目前主流的界面设计方式。

但是,有时,我们会遇到这种需求:把一个已经写好的Form,用PRG的形式,重新实现一遍,比如有时为了申请专利,需要源代码,如果把表单用PRG形式提交的话,就是“原汁原味”的源代码,简单方便;或者,有时为了加密的需要,不利用Form,直接用PRG表达的FORM,更有利于代码加密。

Form_To_Prg,就是在这个背景下开发的。

以下举例说明。
比如我们有这样一个表单:(图1)
只有本站会员才能查看附件,请 登录

表单的各部分已经写好,测试OK。
现在我们需要把这个表单,转换为PRG,于是,运行本程序,出现如下界面:
只有本站会员才能查看附件,请 登录


步骤:1、填写要分析的SCX文件全路径到上方编辑框中(截图略);

然后,2、点击【解析表单】;
点击后,程序开始分析这个SCX文件,并将分析结果显示于编辑框中。如图:
 
只有本站会员才能查看附件,请 登录

步骤3、点击【另存到PRG】(截图略)
这样,就把一个表单文件,转换为PRG了,我们打开这个新生成的PRG,如图:
只有本站会员才能查看附件,请 登录


可以看到,PRG已经生成,尝试运行一下试试?
只有本站会员才能查看附件,请 登录

 
可以看到,界面还原,与图1 一模一样,“克隆”成功。
这样,我们就实现了Form 到PRG的转换.

现在,把这个小程序放上来,欢迎大家都来用用,多多测试(因为刚刚写好,未严格测试,只测试了几个SCX文件)。
 
代码开放,水平有限,写得很菜,权当是抛砖引玉,如果哪一段你看了不爽,你随意修改,我的本意,就是希望这个成为一个公用的工具,所以欢迎各位贡献你的巧思和智慧。
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2021-8-9 15:36编辑过]

40 回复
#2
吹水佬2021-08-09 16:12
ole控件没解释出来?
#3
xuminxz2021-08-09 18:29
不能使用自定义类
#4
schtg2021-08-09 18:56
学习啦,谢谢!
#5
gs25367856782021-08-10 07:46
下载,正在学习中。。。,有味道!
正如三楼朋友讲的,存在着自定义类不能解析的缺点。
添加了一个[寻找表单]按钮,操作更方便。
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2021-8-10 09:52编辑过]

#6
gxouyuan2021-08-10 08:18
好东西,学习了,感谢。
#7
sych2021-08-10 10:14
加油,完善下去
#8
jiazhefish2021-08-10 10:25
都是神人啊
#9
厨师王德榜2021-08-10 12:06
更新了,
加入分析自定义类和OLE控件的动作
加入一个按钮,打开寻找文件对话框.
感谢测试和提出改进意见.
只有本站会员才能查看附件,请 登录
#10
吹水佬2021-08-10 15:58
DO FORM &cFromName name ffrm1 NOSHOW
载入表单时会先触发BeforeOpenTables、Load事件,如果在事件中涉及一些表单之外的东西,有可能会出弹出异常提示窗口。
加个异常直接返回就干净点
ON ERROR return
DO FORM &cFromName name ffrm1 NOSHOW
ON ERROR
#11
厨师王德榜2021-08-10 16:12
回复 10楼 吹水佬
谢谢关注,会改进这一点,有的表单载入时要求参数,直接Do 不带参数的话, 确实会遇到一些问题,应该把Error处理考虑进来.

目前还要解决一个问题,就是所有容器类控件,在它之中的下级控件的识别问题,
目前的程序,会把所有容器中的控件,识别为Form的控件,正在解决中.
#12
schtg2021-08-10 17:57
威武,学习啦,谢谢!
#13
井绳2021-08-12 19:56
好想法,跟进学习
#14
gs25367856782021-08-14 15:46
放置了 ON ERROR return
就基本可以用了。
#15
厨师王德榜2021-08-19 10:50
最新更新:
为了进一步测试代码,特意做了一个多层控件嵌套的Scx表单:如图
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

可以看到,这个表单故意做得有点“绕”,目的就是让程序在较复杂的环境中测试。

以前的第2版程序,无法解析这种比较复杂的结构,尤其容器类控件的嵌套问题解决得不好。

经过几天的研究,现在这个问题终于比较好的解决了。
经测试,新版的程序可以顺利解析出这个多层次嵌套的SCX表单到PRG文件中。
第3版 程序附后,欢迎测试,欢迎各位贡献你们的智慧。
只有本站会员才能查看附件,请 登录



[此贴子已经被作者于2021-8-20 08:46编辑过]

#16
mywisdom882021-08-19 11:15
#17
wengjl2021-08-19 16:51
各位大佬辛苦了
#18
schtg2021-08-19 17:44
谢谢分享!
#19
XUFN2021-08-20 08:57
厨师厉害啊!
#20
gs25367856782021-08-21 10:28
谢谢分享
#21
冬海游鱼2021-09-08 16:10
大神好厉害
#22
hu9jj2021-09-08 21:21
这个软件用处很大,当初我是复制成TXT文件,然后通过文本编辑器来删除不可见字符,最后形成程序代码清单的。
#23
schtg2021-09-09 05:48
该软件很好,谢谢!
#24
sych2021-09-09 08:35
期待更新
#25
nbwww2021-09-09 16:24
这个真不错  收藏了   谢谢
#26
wangzhiyi2021-09-10 15:38
大神威武。收藏。
#27
reakal2021-10-17 11:50
1、表单通过一个自定义表单类派生的,无法正常创建代码。
2、能否增加表单类到prg的转换。

[此贴子已经被作者于2021-10-17 19:12编辑过]

#28
sam_jiang2021-10-17 16:16
回复 15楼 厨师王德榜
思路挺不错的,希望你将来可以替换FoxPro的表单设计器,同时拥有面向对象和过程的设计模式,可以设计一个页框,前一页是所见所得的传统设计模式,后一页是纯代码模式。。。

事实上FoxPro自带的class viewer 拥有自己的代码查看器,可以将FoxPro的form,或class 转变为代码,你可以用作对比,查看自己写的程序和foxpro的差距在哪里。这对提高编程能力非常有帮助,再次表示敬意!!!
#29
sam_jiang2021-10-18 12:10
今天拿自己的表单试了一下,不行。。。
只有本站会员才能查看附件,请 登录


但是仍然没有解读到prg文件。

[此贴子已经被作者于2021-10-18 12:28编辑过]

#30
sam_jiang2021-10-20 10:03
换了一个表单试试,调试一下,还是走到错误处理语句去了,不知道原因呢。
#31
figa2021-11-27 22:08
这个很有用,一定要试试。致敬!
#32
figa2021-12-05 13:52
我抽空试了两个表单,其中一个只运行表单但未提取代码,另一个提取出来代码单运行是出错。关注楼主还有没有优化?
#33
HUXINGKE2021-12-05 17:44
好棒,加油,继续!
#34
vfp程序员2021-12-07 07:49
挺好,但还是会出现下述问题:
SET CLASSLIB TO "wizbtns.vcx" ADDITIVE
SET CLASSLIB TO "wizembss.vcx" ADDITIVE
#35
lambert10122022-06-30 16:01
回复 楼主 厨师王德榜
学会了
#36
wxzd1232022-06-30 19:20
这个必须顶
#37
恒一2022-07-01 10:53
学习啦,谢谢!
#38
sostemp2022-07-06 07:50
学习啦,谢谢!
#39
ZHUHQ20202022-07-14 22:30
酷!
#40
nickname882022-07-15 18:19
好东西,谢谢。
#41
qhyinjun2023-06-12 14:49
不错
1