There is no difference between submenus in standard menus or contextual (pop-up) menus: if there is a submenu in a menu item, then its OnClick event fires immediately before the submenu is displayed (note that you do not need to click it to appear), and in this handler events, you can change the submenu (either set the properties of existing elements, or add new elements / delete existing elements).
Some demo codes about dynamically adding and removing elements:
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;
mghie source share