当我以通常的方式以编程方式创建TmenuItem时,创建的菜单项的Owner将作为参数传递到Create函数中,例如:
var NewMenuItem := TMenuItem.Create(MainMen1);但是,当通过克隆菜单项创建菜单项时,分配其所有者属性会导致错误:
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的所有者呢?
发布于 2022-06-07 12:05:28
可以使用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://stackoverflow.com/questions/72530425
复制相似问题