delphi – 创建和释放TPopupMenu使用的TMenuItem
发布时间:2020-12-15 04:16:39 所属栏目:大数据 来源:网络整理
导读:创建TMenuItem运行时时,如下所示: mi:= TMenuItem.Create([owner]); 并添加到TPopupMenu,如下所示: PopupMenu1.Items.Add(MI); 我是否需要将[owner]指定为PopupMenu1,还是可以使用nil? 在这种情况下,PopupMenu1会免费获得mi,如果是这样,我该如何验证呢?
创建TMenuItem运行时时,如下所示:
mi:= TMenuItem.Create([owner]); 并添加到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释放弹出窗口.该项目将在销毁时通知您的表单. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |