Delphi 和 C++Builder中的“所见即所得”界面设计方式 是如何 实现的? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在设计期,窗体属性和它上面的对象状态信息保存在DFM文件里。在运行期,DFM被编译进EXE文件,程序启动时候,DFM载入创建窗体。简单说来,就是所谓对象持久化,有些地方术语叫对象串行化。。在VCL源码TCustomForm.Create里面,你可以看到载入DFM资源的代码。 准确地说,在设计的时候,把组件信息以及事件处理函数信息等都保存在DFM文件中,当作资源文件。编译的时候,把DFM文件中的信息编译成Windows的资源加入到EXE文件中。运行的时候加载这些windows资源进行初始化。你也可以在自己的程序中自定义类似于DFM文件的资源格式,供你的程序使用。 BPL包也是普通的DLL,不过它不是通过DLL导出函数方式导出类,而是在BPL初始化时候,把BPL里面类注册一下,于是初始化FORM时候,就可以通过DFM里面的类名称FINDCLASS,然后创建出对象.. 谢谢halfdream(哈欠) 不过,小弟还是不太明白。“BPL初始化”是什么意思?FindClass后又如何创建对象呢?请各位高手指点谢谢~ ^_________________________________^ 恳切希望能得到 delphi 和 cb 的“所见即所得界面设计”原理的详叙。不知道 《Inside VCL》 或其他相关书,是否涉及这方面的东西?另外,在这里小弟先给各位大哥,大姐拜个早年!^-^ 其实Delphi和BCB是最强的是其设计期“所见即所得”的功能。原理其实很简单,让控件在设计期也同运行期“一样”(注:看起来“一样”)这个核心就是VCL控件的架构。每一个VCL控件,在打包BPL以后(设计期控件)后,在Delphi中设计时,就象运行时一样Create每一个控件,与运行期不同的是,控件有一个属性:ComponentState。看这个 TComponentState = set of (csLoading, csReading, csWriting, csDestroying, csDesigning, csAncestor, csUpdating, csFixups, csFreeNotification, csInline, csDesignInstance);其中就定义个每个不同的状态……在设计期就为:csDesigning所以在设计期,控件会同样创建起来(基于RTTI-运行期类型信息),并设置其状态为csDesigning,这样就可以在VCL代码中根据状态定义其在设计期具有的特性……显示,行为等…… hydonlee(青山情) 谢谢的 你和大伙 的回答!又让我了解了不少!还想问一下:FindClass是那里定义的? FindClass,RegisterClass等函数都是在CLASSES单元定义的。也就是它们位于VCL.BPL这个动态库中.. halfdream(哈欠) 大哥FindClass 后的创建过程能详细说说吗? 如何将两个独立程序集成在一起? 为什么用idftp get() 下载一个文件后修改日期被改成了系统当前的日期? 如何设置和修改showmessage或者messagebox这类对话框的字体大小和窗体的大小? 如何禁止程序多次启动 向全中国所有在第一线抢救SARS的医务医院致敬!!!!⑵ 共同探讨外挂问题 怎样在delphi里打开其他应用程序,答者有分! 字符转成字节 求救:如何写服务程序? 郁闷哪,好多接口不知道怎么用 谁能做个如此功能【保护视力】的软件? oledb provider驱动程序去哪里下载?
在运行期,DFM被编译进EXE文件,程序启动时候,DFM载入创建窗体。简单说来,就是所谓对象持久化,有些地方术语叫对象串行化。。在VCL源码TCustomForm.Create里面,你可以看到载入DFM资源的代码。
在设计的时候,把组件信息以及事件处理函数信息等都保存在DFM文件中,当作资源文件。
编译的时候,把DFM文件中的信息编译成Windows的资源加入到EXE文件中。
运行的时候加载这些windows资源进行初始化。你也可以在自己的程序中自定义类似于DFM文件的资源格式,供你的程序使用。
注册一下,于是初始化FORM时候,就可以通过DFM里面的类名称FINDCLASS,然后创建出对象..
请各位高手指点谢谢~ ^_________________________________^
恳切希望能得到 delphi 和 cb 的“所见即所得界面设计”原理的详叙。不知道 《Inside VCL》 或其他相关书,是否涉及这方面的东西?
另外,在这里小弟先给各位大哥,大姐拜个早年!^-^
看这个
TComponentState = set of (csLoading, csReading, csWriting, csDestroying,
csDesigning, csAncestor, csUpdating, csFixups, csFreeNotification,
csInline, csDesignInstance);其中就定义个每个不同的状态……在设计期就为:csDesigning所以在设计期,控件会同样创建起来(基于RTTI-运行期类型信息),并设置其状态为csDesigning,这样就可以在VCL代码中根据状态定义其在设计期具有的特性……显示,行为等……
还想问一下:FindClass是那里定义的?
也就是它们位于VCL.BPL这个动态库中..
FindClass 后的创建过程能详细说说吗?