11 Stimme

Delphi/Lazarus: Welches Control hat ein PopUp-Menü aufgerufen? Sender von TPopupMenu?

Frage von Gast | 21.06.2013 um 08:26

Ich benutze das gleiche PopUpMenü für verschiedene Controls (ListView und ListBox).

Das Aufrufen des Popup-Menüs funktioniert auch soweit ganz gut, Probleme gibt es aber den Sender/Aufrufer festzustellen. Ich möchte also zum Beispiel wissen von welcher ListView aus das PopupMenü aufgerufen wurde.

Dazu habe ich zunächst die Variable Sender aus der Prozedur von OnPopup genommen, der Sender ist aber immer der gleiche und führt daher nicht zum Ziel.

Eine andere Idee war es, in einer Variable zu speichern, auf welches Control als letztes geklickt wurde. Das wird zwar funktionieren, ist aber doch viel zu umständlich! Es muss doch eine leichtere Möglichkeit geben um herauszufinden von wo aus das PopUp aufgerufen wurde, oder?

AntwortenPositivNegativ
2Beste Antwort2 Stimmen

Ja, es gibt eine viel leichtere Möglichkeit. Und zwar stellt TPopupMenu die Property PopupComponent zur Verfügung. In dieser Eigenschaft ist immer gespeichert, von welcher Komponente das PopUp zuletzt aufgerufen wurde. 

Hier ein kleines Beispiel:

if PopupMenu1.PopupComponent=ListView1 then begin
   ShowMessage('Aufgerufen von ListView1');
end;

if PopupMenu1.PopupComponent=ListView2 then begin
   ShowMessage('Aufgerufen von ListView2');
end;

if PopupMenu1.PopupComponent is TListView then begin
   ShowMessage('Aufgerufen von einer ListView');
end;

Wir fragen hier in den ersten Beispielen direkt ab, ob von ListView1 oder ListView2 aufgerufen wurde. Das dritte Beispiel reagiert allgemein immer dann wenn PopupComponent eine ListView ist -  also sowohl bei ListView1 als auch bei ListView2.
22.06.2013 um 16:44

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.