gpt4 book ai didi

delphi - 创建并释放 TPopupMenu 使用的 TMenuItem

转载 作者:行者123 更新时间:2023-12-03 14:51:50 25 4
gpt4 key购买 nike

创建 TMenuItem 运行时时如下所示:

mi := TMenuItem.Create([所有者]);

并像这样添加到 TPopupMenu 中:

PopupMenu1.Items.Add(mi);

我需要将[owner]指定为PopupMenu1还是可以使用nil

在这种情况下,PopupMenu1 会免费提供 mi 吗?如果是,我该如何验证它?

最佳答案

您可以指定 nil 作为所有者,父项将释放其自己的项。

至于验证,最简单的就是看TMenuItem.Destroy中的代码:

destructor TMenuItem.Destroy;
begin
..
while Count > 0 do Items[0].Free;
..
end;


如果这还不够,要查看它的实际效果,您可以使用通知机制:

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;

按 Button1 首先将项目添加到弹出菜单中。然后按 Button2 释放弹出窗口。该项目将在被销毁时通知您的表单。

关于delphi - 创建并释放 TPopupMenu 使用的 TMenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10617644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com