Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TMenuItems zur Laufzeit erstellen und auf OnClick reagieren (https://www.delphipraxis.net/61857-tmenuitems-zur-laufzeit-erstellen-und-auf-onclick-reagieren.html)

jesus 27. Jan 2006 10:42


TMenuItems zur Laufzeit erstellen und auf OnClick reagieren
 
Hallo,

ich möchte im Main-Menu meines Programms dynamisch MenuItems erzeugen. Das krieg ich auch hin indem ich mir ein MenuItem definiere und mit der Funktion Add hinzufüge. Im OnClick definiere ich eine Funktion die bei onClick ausgeführt wird. Das mache ich mit mehreren Items innerhalb einer Schleife so wie angedeutet :

{alles in einer Schleife

item:= TMenuItem.Create(self);
item.caption:= 'beliebiger Text';
item.onClick:= ClickProcedure;

menu.items.items[0].add(item);

}

... aber wie kriege ich jetzt raus auf welches MenuItem geklickt wurde ? Ich kann in ClickProcedure jetzt Sachen ausführen, aber nicht abghängig vom geklickten Item ? wie macht man sowas ?

Grüße jesus

Muetze1 27. Jan 2006 10:45

Re: TMenuItems zur Laufzeit erstellen und auf OnClick reagie
 
Die Click Methode die du zugewiesen hast, hat einen Parameter: Sender. Dieser enthält immer das TMenuItem, welches das Ereignis ausgelöst hat. Dies ist bei so gut wie allen Events so, damit man unterscheiden kann, welches Element das Ereignis ausgelöst hat.

Bernhard Geyer 27. Jan 2006 10:45

Re: TMenuItems zur Laufzeit erstellen und auf OnClick reagie
 
Du könntest das Tag-Property setzen und für die unterschiedung verwenden.

jesus 27. Jan 2006 10:49

Re: TMenuItems zur Laufzeit erstellen und auf OnClick reagie
 
an Sender hatte ich auch schon gedacht, aber ich krieg's nicht hin, den Items einen Namen zu geben ...

marabu 27. Jan 2006 12:39

Re: TMenuItems zur Laufzeit erstellen und auf OnClick reagie
 
Das mit dem Namen ist nicht schwer:

Delphi-Quellcode:
menuItem.Name := 'abc';
Alternativ kannst du auch die Funktion NewItem() aus der Unit Menus verwenden. Besser als der Name ist aber ein tag value, wie Bernhard schreibt. Den kannst du dann im event handler recht einfach über ein case statement auswerten:

Delphi-Quellcode:
procedure TDemoForm.MenuItemClick(Sender: TObject);
begin
  with Sender as TMenuItem do
    case Tag of
      TAG_MI_DOTHIS:
        ; // dein code
      else
        ; // auch dein code
    end;
end;
Grüße vom marabu

jesus 30. Jan 2006 12:01

Re: TMenuItems zur Laufzeit erstellen und auf OnClick reagie
 
Danke ... ich kannte den as-Operator noch nicht. Mit dem Tip hab ich's hinbekommen ....

jesus


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz