Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.



Deel:
Meldingen
Alles wissen

[Opgelost] Lazarus - MacOS X - TrayIcon, Runtime toegevoegde popup menuitems niet zichtbaar

3 Berichten
1 Gebruikers
0 Reactions
1,345 Bekeken
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2869
Topic starter  

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;                             

   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2869
Topic starter  

Merk op:

Carbon: in plaats van Hide/Show, gebruik het volgende na een menu update: 

TrayIcon.InternalUpdate;

Cocoa: Hide en Show (Lazarus 2.1.0 r59646M) werkt hier niet en zal zelfs extra TrayIcons aanmaken. Een goede oplossing heb ik nog niet gevonden.


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2869
Topic starter  

Dit probleem zou opgelost moeten zijn in SVN (Lazarus) - dank je wel Dmitry!

Overigens: het veranderen van icons in het popup menu worden in Cocoa nog steeds niet aangepast.


   
BeantwoordenCiteren
Deel: