delphi - 如何将所有者分配给克隆的 TMenuItem?

标签 delphi menuitem vcl delphi-11-alexandria

当我以通常的方式以编程方式创建 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/

相关文章:

delphi - 在delphi中存储之前检查图像大小

delphi - TMainMenu 中的单选项目不使用点,而是使用复选标记

delphi - clx/vcl 不兼容

android - 防止上下文菜单在单击项目(特别是复选框项目)时关闭

contextmenu - 获取 ContextMenu 并添加新项目时出错

sql-server - 通过 Delphi DLL 连接到 SQL 时 Delphi 10.2 Tokyo 程序抛出 216 错误

delphi - 在设计时访问子组件属性

Delphi Indy 404后无响应内容

delphi - 检查变体值 "Nothing"

delphi - 库平台不断切换到Delphi Seattle的64位Windows