代碼如下﹕
procedure TForm1.Button1Click(Sender: TObject);
var
edit:tedit;
begin
//edit := tedit.Create(nil); //1
//edit := tedit.Create(self); //2
//edit := tedit.Create(application);//3
//edit := tedit.Create(form1); //4
edit.Parent := form1;
edit.Visible := true;
end;
我用1﹑2﹑3﹑4中的任一一行都得到相同的結果﹐那請問一下﹐它們有什么區別。也是一個剛學D的同事問我﹐我不知道怎么回答﹐大家給我指點一下好嗎
procedure TForm1.Button1Click(Sender: TObject);
var
edit:tedit;
begin
//edit := tedit.Create(nil); //1
//edit := tedit.Create(self); //2
//edit := tedit.Create(application);//3
//edit := tedit.Create(form1); //4
edit.Parent := form1;
edit.Visible := true;
end;
我用1﹑2﹑3﹑4中的任一一行都得到相同的結果﹐那請問一下﹐它們有什么區別。也是一個剛學D的同事問我﹐我不知道怎么回答﹐大家給我指點一下好嗎
解决方案 »
- 关于存储过程参数调用和DATETIMEPICKER的问题,请高手们帮忙!!
- 难!难!难!image显示问题!
- 这样怎样的处理,关于窗体最小化的问题!
- 如何仅显示前10条记录
- 超级郁闷,怎样设置打印机纸张的大小(类型),找了好多资料,大多让我从控制面板中设置,太不可思议了
- 如何增加登录窗口?
- 关于DBGrid 在 MultiSelect时一次选择全部记录的问题
- 请问在delphi中如何使用sql语句?急!
- 各位,有一个报表方面的难题,如果你是高手,就请赐教!!!!!!!!
- 怎么读取存的数据?
- 能给我一个如何把TreeView里的数据都保存到字符数组里的例子。谢
- Installshield如何用delphi编制其序列号校验之DLL?
如果你在窗口设计时把组件放置在窗口上,窗口将自动成为组件的拥有者。当你在运行期间创建一个组件时,必须向组件的Create构造器传递组件的拥有关系;它被设置为新组件的Owner属性。下面一行
语句表示了如何向TButton.Create( )构造器传递窗口隐含的参数Self。这样使窗口成为新创建组件的拥有者:
Mybutton:=TButton.create(self);
当窗口被析构时,与MyButton有关的TButton实例也会被析构。这是在VCL内部处理的。实质上,窗口再次通过Components数组属性遍历组件并析构它们。
通过传递nil给组件的Create()方法,可以创建一个不具备拥有者的组件。不过,如果这样做了,编程时你需要负责组件的删除。下列代码显示了这个技术:
Mytable:=TTable.create(nil)
try
....
finally
Mytable.free;
end;
要使用这个技术,应当用一个try. . . finally块来确保出现异常时释放所分配的资源。你不应使用这个技术,除非特殊情况—不能给组件指定拥有者。
另一个有关拥有关系的属性是Components属性。Components属性是一个数组属性,包含一个组件所拥有的全部组件的列表。例如,要遍历一个窗口的所有组件以显示它们的类名称,需要执行下列代码:
var
i:integer;
begin
for i:=0 to ComponentCount-1 do
showmessage(Components[i].classname);
end;
显然,你还可以针对这些组件执行更有意义的操作。这里只是简单地说明这一技术。
self表示创建的控件属于他所在的单元,应该是form1了
application指的是应用程序,在你这里估计也是form1
而nil主要是指空的,及需要付值*个人意见,仅供参考*
//edit := tedit.Create(nil); //edit没有拥有者
//edit := tedit.Create(self); //edit的拥有者是edit所在的form
//edit := tedit.Create(application);//edit的拥有者是application,
//edit := tedit.Create(form1); //edit的拥有者是form1,如果edit在form1上,和传递self是一样的。
edit := tedit.Create(self); //Self就是Edit所在窗体
edit := tedit.Create(application);//指定有程序释放,其实不指定也一样
edit := tedit.Create(form1); //和2完全一样,只不过一个用了隐含参数而已
TWinControl的派生物)才能成为其他组件的父。父组件负责调用子组件的方法来绘出子组件。一个组件的父是通过它的Parent属性指定的。
一个组件的父不必一定是这个组件的拥有者。对于组件来说,它有不同的父和拥有者是合法的。