Delphi5: PopUp Menü zur Laufzeit erstellen

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.

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!

und ich bin sicher hier kann mir jemand helfen! :wink:

vielen dank!!

-Thomas

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,

  1. 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.

  2. 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