• 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API

TForm.Create(Self)的self是做什么用的?

ShapeRock 2004-12-28 07:01:18
1.TForm.Create(Self)的self是做什么用的?
2.form1 :=TForm.Create(Self);
form1 :=TForm.Create(nil);
上两创建时有什么区别,运行在表现在哪里不同?
...全文
120 点赞 收藏 5
写回复
5 条回复
g961681 2004年12月28日
procedure TCustomForm.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
case Operation of
opInsert:
begin
if AComponent is TCustomActionList then
begin
if FActionLists = nil then FActionLists := TList.Create;
FActionLists.Add(AComponent);
end
else if not (csLoading in ComponentState) and (Menu = nil) and
(AComponent.Owner = Self) and (AComponent is TMainMenu) then
Menu := TMainMenu(AComponent);
end;
opRemove:
begin
if (FActionLists <> nil) and (AComponent is TCustomActionList) then
FActionLists.Remove(AComponent)
else
begin
if Menu = AComponent then Menu := nil;
if WindowMenu = AComponent then WindowMenu := nil;
if ObjectMenuItem = AComponent then ObjectMenuItem := nil;
end;
end;
end;
if FDesigner <> nil then
FDesigner.Notification(AComponent, Operation);
end;
这是来自vcl的代码。
回复 点赞
g961681 2004年12月28日
跟Notification函数有关。
当为self时,需要通知当前form的所有组件,刚才的form已经创建了,并且可以不用手工释放,在self释放时,同时会释放其下属的刚创建的form的。如果你把刚创建的form手工释放的话,同样还会再通知self里的所有组件,它已经释放了。
在这一方面的的一般用法:如果生命周期很短的form,我会
with Tform.create(nil) do
try
ShowModal;
finally
Free;
end;
如果生命周期比较长的,比如在create时创建,destory时释放的窗体,我会create(application);
回复 点赞
syl79 2004年12月28日
form1 :=TForm.Create(Self);
指定Owner为self指向的窗口,则self指向的窗口Free时由该窗口自动Free生成的form1。self也可以为当前的application。
form1 :=TForm.Create(nil);
未指定owner,得程序自己调用Free过程。
回复 点赞
yangfan369 2004年12月28日
就是当前form
回复 点赞
boatzm 2004年12月28日
AOwner is the owner of the TCustomForm object.
回复 点赞
发动态
发帖子
Delphi
创建于2007-08-02

1472

社区成员

26.2w+

社区内容

Delphi 开发及应用
社区公告
暂无公告