當我TmenuItem以通常的方式以編程方式Owner創建時,創建的選單項的 將作為Create函式中的引數傳遞,例如:
var NewMenuItem := TMenuItem.Create(MainMen1);
但是,當通過 CLONING 創建選單項時,分配其 Owner 屬性會導致錯誤:
function CloneMenuItem(SourceItem: TMenuItem): TMenuItem;
begin
with SourceItem do
Result := Vcl.Menus.NewItem(Caption, Shortcut, Checked, Enabled, OnClick, HelpContext, Name 'Cloned');
//Result.Owner := pmMyPopupMenu; // ERROR
end;
那么如何指定克隆的所有者TMenuItem呢?
uj5u.com熱心網友回復:
您可以使用TComponent.InsertComponent方法設定所有者,例如:。
function CloneMenuItem(SourceItem: TMenuItem): TMenuItem;
begin
with SourceItem do
Result := Vcl.Menus.NewItem(Caption, Shortcut, Checked, Enabled, OnClick, HelpContext, Name 'Cloned');
pmMyPopupMenu.InsertComponent(Result);
pmMyPopupMenu.Items.Add(Result);
end;
如果您查看 中的NewItem函式實作Vcl.Menus,它只是創建一個nil作為所有者的專案并設定傳遞的屬性。沒有什么聰明的。在您的情況下,我更喜歡行內代碼或在專案創建時明確設定所有者的本地函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/493570.html
標籤:德尔福 菜单项 vcl delphi-11-亚历山大
