子を持つ TMenuItem 全体を別の TPopupMenu に複製したいと考えています。ここに素敵なコードがあります:
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 つのアイテムしか表示されません。