Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Popupmenu während der Laufzeit verändern
Atreyu - Mo 26.11.07 20:23
Titel: Popupmenu während der Laufzeit verändern
Ich möchte mein Popupmenü in der Laufzeit editieren, zB neue Menüs dazu oder wegmachen. Ich hab bisher noch nichts gefunden und kann es nur in der Umgebung von Derlphi verändern, geht das irgendwie?
Gausi - Mo 26.11.07 20:34
Klar geht das. z.B. so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var newItem: TMenuItem; begin newItem := TMenuItem.Create(self); newItem.Caption := 'Neues Item'; newItem.OnClick := Button1Click; PopupMenu1.Items.Add(newItem); end; |
Atreyu - Mo 26.11.07 20:40
OH DANKE! Jetzt kann ich mein langersehntes neues Feature einbauen!
Atreyu - Mo 26.11.07 22:30
Oh, sorry, aber wenn cih etwas in einem Submenu added will?
Weil deine Funktion added mir das direkt ins popup, aber das muss in ein Submenü.
edit:
Quelltext
1:
| MenuSkins.Add(newItem); |
MenuSkins ist mein Submenu. So klappts, BIS auf die Tatsache, dass das erste item leer bleibt.
Also die Items werden in einer Schleife hinzugefügt, ich kriege die auch schön in eine Liste, nur leider fehlt die Caption im ersten Item des Submenüs.
Was fehlt?
und: Er springt ja beim Klick auf jedes der Items in eine procedure. Nur wie kriege ich in der procedure raus, welches Item jetzt das Event ausgelöst hat?
Tilman - Mo 26.11.07 22:40
meinst du so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var newItem: TMenuItem; begin newItem := TMenuItem.Create(self); newItem.Caption := 'Neues Item'; newItem.OnClick := Button1Click; PopupMenu1.Items[0].Add(newItem); end; |
?
// Edit: zeig mal deine Schleife. Vielleicht hast du nicht berücksichtigt das die zählung bei 0 beginnt?
Atreyu - Mo 26.11.07 22:59
Beginnt bei 0, ja, spüielt aber keine Rolle, da ich ja Add nehme.
Ich habe jetzt Item[0] sowieso anderweitig belegt, ist also ander gelöst.
Nur kann ich (wie editiert oben) nicht ermittelt, auf welches Item der User geklickt hat. Wie kann ich das machen?
Ich lasse alle Items zu einer Funktion mit parameter Sender: TObject springen, aber dort muss ich ja wissen, welches Menuitem es genau war.
Tilman - Mo 26.11.07 23:12
Ich hab das immer so gemacht dass ich tag entsprechend gesetzt habe.
Also in der Schleife z.B.
Und später kannst du dann in der Behandlungsroutine, im Beispiel war das ja Button1Click, so vorgehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var index: Integer; begin index := (sender as TMenuItem).tag; case index of 0: ; 1: ; 2: ; end; end; |
natürlich kannst du auch caption abfragen oder so.
Atreyu - Mo 26.11.07 23:19
Ahhh, dankedankedanke!
Genau, was ich suche. Auf das "as" wäre ich nie gekommen!
edit: Kann es sein, dass er Strings verändert, wenn er sie aus ner INI liest? Auf einmal haben Buchstaben ein "_" drunter...
Agawain - Mi 28.11.07 11:00
hi
Nein, setz die Eigenschaft Autohotkeys des Menüeintrags auf maManual, deafault ist maAutomatic
Gruß
Aga
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!