我想用它的孩子将整个TMenuItem克隆到另一个TPopupMenu。 这是一个nice code:
function CloneMenuItem(SourceItem: TMenuItem): TMenuItem;
var
I: Integer;
Begin
with SourceItem do
Begin
Result := NewItem(Caption, Shortcut, Checked, Enabled, OnClick, HelpContext, Name + 'Copy');
for I := 0 To Count - 1 do
Result.Add(CloneMenuItem(Items[I]));
end;
end;
以下工作正常(b1是带子菜单的PopupMenu1.TMenuItem):
PopupMenu2.Items.Add(CloneMenuItem(b1));
问题是如果SourceItem是根项目,我无法克隆整个 TPopupMenu。 例如:
PopupMenu2.Items.Add(CloneMenuItem(PopupMenu1.Items));
不工作。我只能看就是1项,好像它是一个分隔符。
答案 0 :(得分:4)
您不能像那样克隆TPopupMenu.Items
。即使TPopupMenu.Items
是TMenuItem
对象,它也不是实际的菜单项,它只是托管其他TMenuItem
对象的容器。您必须循环遍历这些子项并将其单独克隆,例如:
for I := 0 to PopupMenu1.Items.Count-1 do
PopupMenu2.Items.Add(CloneMenuItem(PopupMenu1.Items[I]));