我是新手,想问一个简单的问题,在程序设计时拖放控件到窗口,就自动形成了下面的代码:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}end.
,其中Button1与 Edit1 都属于类 TForm1 的字段,在程序里看不到他们被创建或者释放的代码,我想问他们是什么时候被创建和释放的啊?怎么创建与释放的。
因为根据面向对象的程序设计,字段为类类型时需要用Create进行创建。
我查了TForm类,他没有Create构造函数,再往上查TCustomForm,有Create构造函数,但是里面也没看到怎么创建类类型字段,请问大家指点一下。面向对象

解决方案 »

  1.   

    在Form窗体上右键,选择view as text,就可以看到在设计时拖放控件形成的所有对象的属性定义。在Delphi程序运行时,会根据此dfm文件中的定义,创建各种对象,最后形成整个窗体对象。至于创建代码我也没去找过,跟踪一下源文件可能会找到。
      

  2.   

    你可以去看下这篇文章《剖析Delphi中的构造和析构》
      

  3.   

    那delphi是在哪里地方去读dfm文件的,怎么读的?比如在哪一个祖先类,在哪个方法里面?在网上搜了一下这篇文章,好像没有怎么说到啊,是不是我找错了,能给个地址吗?
      

  4.   

    它们都是作为资源和Form一起创建和释放的。
      

  5.   

    我跟踪了一下代码,Application是在Controls单元的initialization初始化部分的InitControls过程里面创建的,Form1是在工程文件Project1里面的Application.CreateForm(TForm1, Form1)里面创建的,然后我在Tbutton的Create方法里面设置断点,进行单步调试运行,然后看他们的Create执行完毕是返回到TReader.ReadComponent的内部函数CreateComponent里面,我想这些组件应该是在TReader里面创建的,然后再继续跟踪,就有点乱了,太多层了,又有递归调用等,不好理清关系,不知道有没有哪位高手探究过,指点一下。
      

  6.   

    看窗体上button的创建(Call Stack):
      

  7.   

    刚才在网上找了下面这篇文章:
    http://wenku.baidu.com/view/dc6c683a87c24028915fc3ef.html
    里面是说Delphi 的消息机制浅探,但里面有讲到程序运行脉络,好像明白了一点。
      

  8.   

    FormCreate事件之前创建。
    FormDestroy事件之后释放。
    你完全可以自己写代码实现创建和释放
    var
     BT1: TButton;BT1:= TButton.Create(self);...如果确定要跟踪,最好写个vcl组件,安装组件,把组件放到form中,再跟踪组件的中的事件。