直播中
回答:
首先说说AOwner参数。顾名思义AOwer就是所有者的意思,也就是说您要生成的控件是由谁所有的!在Delphi中控件的所有者是要负责该控件的生成和释放的。也即是说控件的所有者如果调用了Free方法删除自己,那么他所拥有的控件也一样要调用Free方法删除自己。明白了么?
Self在Delphi中总是代表实例本类,大概等于是C++中的this指针,如果学过C++的话就很容易明白啦!这个Self和C++中的this指针一样也是隐含于其所在类的所有属性和方法前的,也就是说你对本类的方法的调用和属性访问都是隐含的在最前面加上Self这个前缀的。Delphi中的程序多数都是一个窗体一个类的,所以Self常常是指其所在的窗体的实例。例如我们常常单独用Close方法来关闭本窗口,假设有一个叫Form1的窗口我们要关闭他。现在我们可以试试用Close或者Self.Close来试一试,比较以下就可以明白,他们是等价的!
Application在Delphi中是表示整个应用程序,他是TApplication类的一个实例在一个应用程序中有且只有一个,并且是不用用户干预而自动生成的。
说到这里也许大家很容易就能看出他们之间的区别来了!我们光说没有意思,来举个例子说明,请跟着下面的说明建立一个程序:
打开Delphi5,新建立一个应用程序,加入Form1、Form2和Form3三个窗口,其对应的单元文件分别是Unit1、Unit2和Unit3;在Form1上放两个分别名为Button1和Button2的TButton类按钮,在Form2上放一个名为Button3的TButton类按钮;在Form1的单元文件Unit1中的interface下的uses部分加入对Form2的单元文件Unit2的引用,在Form2的单元文件Unit2中的interface下的uses部分加入对Form3的单元文件Unit3的引用;在Form1的private关键字下定义Form2: TForm2;在Form2的private关键字下定义Form3: TForm3;
在Button1的OnClick事件中写如下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:= TForm2.Create(Self);
Form2.Show;
end;
在Button2的OnClick事件中写如下代码:
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Free;//将动态建立的Form释放
end;
在Button3的OnClick事件中写如下代码:
procedure TForm2.Button3Click(Sender: TObject);
begin
Form3:= TForm3.Create(Self);
Form3.Show;
end;
运行后依次点三个按钮试试看,然后把Form3:= TForm3.Create(Self);这句用Form3:= TForm3.Create(Application)代替再试试看有什么不一样,是不是明白了我上面所讲的呢?一定要试试哦!还要提醒一点,谁建立谁释放原则要牢记哦!!!