当我以通常的方式以编程方式创建 TmenuItem
时,创建的菜单项的 Owner
将作为参数传递到 Create
函数中,例如:
var NewMenuItem := TMenuItem.Create(MainMen1);
但是,当通过克隆创建菜单项时,分配其 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
的所有者?
最佳答案
您可以使用 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;
如果您查看 Vcl.Menus
中的 NewItem
函数实现,它只是创建一个以 nil
作为所有者的项目,并设置传递的属性。那里没有什么聪明的地方。在您的情况下,我更喜欢内联代码或在项目创建时显式设置所有者的本地函数。
关于delphi - 如何将所有者分配给克隆的 TMenuItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72530425/