网乐原科技

直播中

news center新闻中心
首页 > 资讯中心 > 软件技术

动态建立控件时Self和Application实参的区别

发布时间:2008-12-07     阅读数: 次       来源:网乐原科技
许多的Delphi入门类书籍都有讲如何动态生成控件,也就是讲用Create函数动态构造控件,不过这些书一般没有讲所传递的AOwner参数中最常用的两个值Self和Application之间的区别。这就让我们这些初学者刚看到时感到很迷惑!这次我就试着区分一下这两个实参,如果你正好也不清楚他们之间的区别,那么就请看下去,也许能省下您不少查书的时间。


回答:
  首先说说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)代替再试试看有什么不一样,是不是明白了我上面所讲的呢?一定要试试哦!还要提醒一点,谁建立谁释放原则要牢记哦!!!

网乐原科技

客服热线:0771-5761507

QQ:53290011

QQ邮箱:53290011@qq.com

工作时间:周一到周五 9:00-18:00

地址:广西南宁市江南万达写字楼C16栋1309室

物联网开发

关注我们

微信小商店 腾讯QQ客服 微信客服