Нет никакой разницы между подменю в стандартных меню или контекстных (всплывающих) меню: если к пункту меню прикреплено подменю, его событие OnClick
сработает непосредственно перед отображением подменю (обратите внимание, что вам не нужно щелкните, чтобы он появился), и в этом обработчике событий вы можете изменить подменю (либо установить свойства существующих элементов, либо добавить новые элементы / удалить существующие элементы).
Демонстрационный код о динамическом добавлении и удалении элементов:
procedure TForm1.FormCreate(Sender: TObject);
var
Popup: TPopupMenu;
Item, SubItem: TMenuItem;
begin
Popup := TPopupMenu.Create(Self);
PopupMenu := Popup;
Item := TMenuItem.Create(Popup);
Item.Caption := 'Test submenu';
Item.OnClick := PopupClick;
Popup.Items.Add(Item);
SubItem := TMenuItem.Create(Item);
SubItem.Caption := 'dummy';
Item.Add(SubItem);
end;
procedure TForm1.PopupClick(Sender: TObject);
var
SubmenuItem, Item: TMenuItem;
begin
SubmenuItem := Sender as TMenuItem;
// delete old items (leave at least one to keep the submenu)
while SubmenuItem.Count > 1 do
SubmenuItem.Items[SubmenuItem.Count - 1].Free;
// create new items
while SubmenuItem.Count < 3 do begin
Item := TMenuItem.Create(SubmenuItem);
Item.Caption := Format('new item created %d', [GetTickCount]);
SubmenuItem.Add(Item);
end;
end;