Ik was wat aan het spelen met TTrayIcon op een Mac en merkte dat als je dynamisch (runtime) menuitems toevoegd, dat deze helemaal niet zichtbaar worden. Blijkbaar is dit "normaal" gezien het gebrek aan reacties op het Lazarus Forum.
Om toch dynamisch menu items toe te voegen, veranderen of verwijderen, cond ik na lang prullen een oplossing die wel werkt.
Je Hide de TrayIcon, maakt jouw popupmenu wijzigingen, en maakt TrayIcon weer zichtbaar:
trayicon1.Hide;
// Voeg toe/verwijder/bewerk popupmenu items
trayicon1.Show;
Toevoegen werkt net als bij een gewoon menu, en wie interesse heeft, hier een voorbeeldje:
...
var tmpMenuItem : TMenuItem;
...
tmpMenuItem := TMenuItem.Create(PopupMenu1);
tmpMenuItem.Caption:='new menu item';
// Optioneel:
// tmpMenuItem.Name := 'MijnMenuItem'; // Naam geven zodat we er later tegen kunnen babbelen
// Optioneel, maar nodig om klikken af te handelen
// tmpMenuItem.OnClick:=@MenuItem_Click; // so the click event is handled
...
PopupMenu1.Items.Add(tmpMenuItem); // insert at the beginning or at a given position
// PopupMenu1.Items.Insert(0,tmpMenuItem); // Alternative: insert at the beginning or at a given position
...
De procedure MenuItem_Click zou je kunnen definieren als:
...
procedure MenuItem_Click(Sender: TObject);
...
procedure TConnectMeNowForm.MenuItem_ServerShareClick(Sender: TObject);
var tmpMenuItem:TMenuItem;
begin
tmpMenuItem:=TMenuItem(Sender);
if tmpMenuItem='MijnMenuItem' then ... // doe iets
...
end;