如何克隆TPopupMenu的菜单项?

时间:2012-05-15 16:04:52

标签: delphi delphi-7

我想用它的孩子将整个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项,好像它是一个分隔符。

1 个答案:

答案 0 :(得分:4)

您不能像那样克隆TPopupMenu.Items。即使TPopupMenu.ItemsTMenuItem对象,它也不是实际的菜单项,它只是托管其他TMenuItem对象的容器。您必须循环遍历这些子项并将其单独克隆,例如:

for I := 0 to PopupMenu1.Items.Count-1 do
  PopupMenu2.Items.Add(CloneMenuItem(PopupMenu1.Items[I]));