Hallo!
also, ich möchte ein popupmenü zur
laufzeit erstellen (bzw. mit einträgen
füllen!)
das mache ich bisher ungefähr so:
var
NewItem:TMenuItem;
NewItem := TMenuItem.Create(Self);
NewItem.Caption := ‚Zeile1‘;
PopupMenu1.Items.Add(NewItem);
NewItem := TMenuItem.Create(Self);
NewItem.Caption := ‚Zeile2‘;
PopupMenu1.Items.Add(NewItem);
usw…
nur müsste ich nurnoch wissen wie ich den
einträgen eine procedure
zuweisen kann die dann aufgerufen wird
wenn ich klicke.
Hi,
-
definiere im Formular ne Prozedur
„procedure TForm3.PopupMenu7Popup(Sender: TObject)“;
wo Du den Code reinschreibst, der bei der Wahl des Menüpunktes ausgeführt werden soll.
-
Dort, wo Du die Menüpunkte erzeugst, fügst Du noch die Verknüpfung des OnPopup-Ereignisses mit obiger Prozedur hinzu:
NewItem9 := TMenuItem.Create(Self);
NewItem9.Caption := ‚Rechnung drucken‘;
NewItem9.OnPopup := PopupMenu7Popup;
am besten wäre EINE procedure für ALLE
einträge, und ich könnte
dann beim aufruf feststellen können
welche ZEILE geklickt wurde.
das wäre optimal!
Klar kannst Du mehrere NewItems.OnPopup-Prozedurzeiger mit derselben Prozedur belegen. Um abzufragen, welcher Menüpunkt aufgerufen wurde, würde ich Dir aber raten, statt endlose „IF Caption=‚Rechnung drucken‘ THEN…“-Konstrukte zu schreiben das Tag-Property zu verwenden (für diese Zwecke isses nämlich gedacht):
NewItem1 := TMenuItem.Create(Self);
NewItem1.Caption := ‚…‘;
NewItem1.Tag := 1;
NewItem1.OnPopup := PopupMenu7Popup;
NewItem2 := TMenuItem.Create(Self);
NewItem2.Caption := ‚…‘;
NewItem2.Tag := 2;
NewItem2.OnPopup := PopupMenu7Popup;
NewItem3 := TMenuItem.Create(Self);
NewItem3.Caption := ‚…‘;
NewItem3.Tag := 3;
NewItem3.OnPopup := PopupMenu7Popup;
usw.
und in der Prozedur „PopupMenu7Popup“ identifizierst Du den „Sender“ anhand seines Tags (die Tags müssen natürlich eindeutig sein!) so:
CASE (Sender AS TMenuItem).Tag OF
1: …;
2: …;
3: …
END
Mit freundlichem Gruß
Martin