如题

解决方案 »

  1.   

    在设计期,窗体属性和它上面的对象状态信息保存在DFM文件里。
    在运行期,DFM被编译进EXE文件,程序启动时候,DFM载入创建窗体。简单说来,就是所谓对象持久化,有些地方术语叫对象串行化。。在VCL源码TCustomForm.Create里面,你可以看到载入DFM资源的代码。
      

  2.   

    准确地说,
    在设计的时候,把组件信息以及事件处理函数信息等都保存在DFM文件中,当作资源文件。
    编译的时候,把DFM文件中的信息编译成Windows的资源加入到EXE文件中。
    运行的时候加载这些windows资源进行初始化。你也可以在自己的程序中自定义类似于DFM文件的资源格式,供你的程序使用。
      

  3.   

    BPL包也是普通的DLL,不过它不是通过DLL导出函数方式导出类,而是在BPL初始化时候,把BPL里面类
    注册一下,于是初始化FORM时候,就可以通过DFM里面的类名称FINDCLASS,然后创建出对象..
      

  4.   

    谢谢halfdream(哈欠) 不过,小弟还是不太明白。“BPL初始化”是什么意思?FindClass后又如何创建对象呢?
    请各位高手指点谢谢~  ^_________________________________^
      

  5.   


    恳切希望能得到 delphi 和 cb 的“所见即所得界面设计”原理的详叙。不知道 《Inside VCL》 或其他相关书,是否涉及这方面的东西?
    另外,在这里小弟先给各位大哥,大姐拜个早年!^-^
      

  6.   

    其实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代码中根据状态定义其在设计期具有的特性……显示,行为等……
      

  7.   

    hydonlee(青山情)  谢谢的 你和大伙 的回答!又让我了解了不少!
    还想问一下:FindClass是那里定义的?
      

  8.   

    FindClass,RegisterClass等函数都是在CLASSES单元定义的。
    也就是它们位于VCL.BPL这个动态库中..
      

  9.   

    halfdream(哈欠) 大哥
    FindClass 后的创建过程能详细说说吗?