奇怪的问题 : 在运行时动态载入窗体(.dfm)?(200分奉上)(200分)

  • 主题发起人 主题发起人 剑知心
  • 开始时间 开始时间

剑知心

Unregistered / Unconfirmed
GUEST, unregistred user!
我见过别的公司的程序这样做过,将一个没有窗体的 dpr 编译成EXE,运行时程序动态
载入一个个的 DFM 文件,实现打开窗体,打开窗体就像在运行时载入一个图片一样,
和一般程序没什么两样,很奇怪吧。请问各位大虾这是怎么做的?
★★★请详细说明,并附代码★★★
 
.dfm里面只有资源,.dcu里面才是代码
除非他的.dpr里面可以动态关联.dfm中控件的事件
你可以寻找dfmview.exe : www.inthink.com
它可以直接观察.dfm文件,如果有.pas的话,它也可以显示事件
============
.dpr中,载入.dfm文件,在内存中动态再生整个窗体
事件的话事先就根据.dfm文件定制了,比如可以根据控件的.tag来进行识别
或者独特的.dfm的事件,对应独特的.dll

不过我觉得这种做法没什么用处,仅仅是让主程序更小巧而已,当然可以有效减少内存消耗
 
怎么没用呢?这样便于修改程序而不用重新编译,由于执行文件很小所以更利于网上传输,
能提供一些代码吗?
 
不会使用控件流吧,把所有窗体控件存成控件流文件,
需要时动态载入,不过,感觉上如果数据绑定,这样很不方便
 
控件流是什么?
 
>怎么没用呢?这样便于修改程序而不用重新编译,由于执行文件很小所以更利于网上传输,
>能提供一些代码吗?

如果单纯是要运行未编译的Delphi窗体或单元,用DreamScripter就可以了。不过主文件不会很小。
所有可能需要的类你必须先在DreamScripts里注册
 
执行文件编译后才十几 K,肯定没有用 DreamScripter
应该也不是控件流,因为动态载入的都是二进制的Dfm,而且修改了DFM后,不编译直接执行
就看到了修改后的结果了。
 
Form2 := TForm.CreateNew(Application);
ReadComponentResFile('Temp.dfm', Form2);
 
to 剑知心:
老兄可否贡献个例子让俺研究一番?
doxpix@netease.com,或者给个URL也行。
 
剑知心:我要你的email发例子
 
zjlcc:
你的没有人家描绘的那么美妙吧。
 
我的邮箱 : hxf_mail@sina.com.cn
 
to doxpix:
!!!??? 我要是有例子,我发帖子干吗?
 
呵呵,我没说要看源码呀。举个例子,哪个程序能够实现象你描绘
那样的功能。
 
dfm 文件只是资源文件罢了,它保存了窗体中各控件非缺省的设置值,但象事件处理函数等
可执行代码并没有保存在它里面,因此动态改变窗体控件的外观是可以的,zhhc 的方法
就可以做到这点,运行时保存窗体也容易,但控件对事件的响应方式却不好改变,你可以动
态对事件赋给它不同的处理过程,但这个处理过程的代码,却必须发布时已编译到你的exe
或 dll(bpl) 文件中。所以修改程序而不用重新编译是不行的,除非用 script 。
 
后退
顶部