Vla*_*lad 7 delphi delphi-7 menuitem
创建TMenuItem运行时时,如下所示:
mi := TMenuItem.Create([owner]);
并添加到TPopupMenu,如下所示:
PopupMenu1.Items.Add(mi);
我是否需要指定[owner]
为PopupMenu1或我可以使用nil
?
mi
在这种情况下PopupMenu1 将免费,如果是,我该如何验证呢?
Ser*_*yuz 11
您可以将nil指定为所有者,父项将释放其自己的项.
至于验证,最简单的方法是查看代码TMenuItem.Destroy
:
destructor TMenuItem.Destroy;
begin
..
while Count > 0 do Items[0].Free;
..
end;
Run Code Online (Sandbox Code Playgroud)
如果这还不够,要查看它的运行情况,您可以使用通知机制:
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
mi: TMenuItem;
protected
procedure Notification(AComponent: TComponent; Operation: TOperation);
override;
end;
..
procedure TForm1.Button1Click(Sender: TObject);
begin
mi := TMenuItem.Create(nil);
mi.FreeNotification(Self);
PopupMenu1.Items.Add(mi);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
PopupMenu1.Free;
end;
procedure TForm1.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
if (AComponent = mi) and (Operation = opRemove) then
ShowMessage('mi freed');
end;
Run Code Online (Sandbox Code Playgroud)
按Button1首先将项目添加到弹出菜单.然后按Button2释放弹出窗口.该项目将在销毁时通知您的表单.
归档时间: |
|
查看次数: |
928 次 |
最近记录: |