![]() |
Von welcher Komponente kommt popup-Aufruf
Hallo, ich stehe wieder einmal auf dem Schlauch.
Ich habe ein Popumenu, das ich verschiedenen Komponenten eines Formular zuordne. Wie kann ich in der onclick-Routine eines TMenuitem auf einfache Art feststellen, auf welche Komponente geklickt wurde, um das Popup-menu zu öffnen? |
AW: Von welcher Komponente kommt popup-Aufruf
Hi,
meinst du sowas?
Delphi-Quellcode:
Du kannst das Sender als diese Komponente casten die sie wirklich ist. z.B. TButton(Object), TLabel(Object) usw...
procedure TfrmMain.mntmN32Click(Sender: TObject);
var LMenuItem : TMenuItem; begin LMenuItem := TMenuItem(Sender); ShowMessage(LMenuItem.Caption); end; Freundliche Grüsse |
AW: Von welcher Komponente kommt popup-Aufruf
Dafür gibt es doch was von ...
![]() @milos Jeder Event, der von dem TPopupMenu ausgelöst wird hat als Sender ... das TPopupMenu ;) |
AW: Von welcher Komponente kommt popup-Aufruf
Erst beim 2. mal richtig kapiert was du wolltest :stupid:
Hier ein bisschen Code für alles:
Delphi-Quellcode:
procedure TfrmMain.mntmN32Click(Sender: TObject);
var LMenuItem : TMenuItem; LPopupMenu : TPopupMenu; LParentComponent : TComponent; begin LMenuItem := TMenuItem(Sender); LPopupMenu := TPopupMenu(LMenuItem.GetParentMenu); LParentComponent := TComponent(LPopupMenu.PopupComponent); // Komponente auf der TPopupMenu liegt ShowMessage(LParentComponent.Name); end; |
AW: Von welcher Komponente kommt popup-Aufruf
@milos
Wieso ein
Delphi-Quellcode:
nochmals zu einem
TComponent
Delphi-Quellcode:
casten?
TComponent
Noch componentiger geht nicht ;) Und wenn das Popup poppt, dann feuert ![]() |
AW: Von welcher Komponente kommt popup-Aufruf
Zitat:
Nee, hab den 2. Code einfach in der universal IDE "notepad.exe" erweitert, hab nicht sehen können, dass es schon ein TComponent ist :D |
AW: Von welcher Komponente kommt popup-Aufruf
Danke.
Ich habe die Dokumentation von TMenuitem von vorne nach hinten nach irgendetwas brauchbarem durchsucht, aber eigentlich ist es logisch, dass die Eigenschaft zum Popupmenu gehört und nicht zum Menuitem. |
AW: Von welcher Komponente kommt popup-Aufruf
So, jetzt habe ich in dem Zusammenhang noch ein Problem:
Durch einen Klick mit der linken Maustaste wird in der TListbox der Itemindex auf das Element gesetzt, auf das geklickt wurde. Bei einem Klick mit der rechten Maustaste passiert das aber nicht, es wird das Popup-menü aufgerufen, aber der Itemindex bleibt unverändert, unter Umständen bei einem anderen Item als bei dem, auf das geklickt wurde. Ich würde aber gerne auch bei einem Rechtsklick manche der Menüaktionen spezifisch für ein bestimmtes Item der Listbox machen, ohne dass der User erst mit der linken Taste das Item anklicken muss, bevor er rechts klickt. Dazu wollte ich zusätzlich zum Popupmenü in einem Onmousedown-Event der Listbox den itemindex richtig setzen. Das funktioniert aber nicht, weil durch das Onmousedown Ereignis das popupmenü offenbar unterdrückt wird, der Mausklick wird anscheinend dadurch "verbraucht" und weitere Aktionen finden nicht statt. Und wenn ich in der Onmousedown Routine am Ende ein
Delphi-Quellcode:
aufrufe, bekomme ich
TListbox(sender).popupmenu.popup(x,y)
Code:
Im Debugger habe ich überprüft, dass Sender die richtige TListbox ist und das dort referenzierte Popupmenü das ist, das ich brauchen würde.
Zugriffsverletzung bei Adresse 00903A8E in Modul 'FocusOffice.exe'. Lesen von Adresse 00000000.
--------------------------- OK --------------------------- |
AW: Von welcher Komponente kommt popup-Aufruf
PopupComponent ist, so wie es auch in der OH steht, nur gültig, wenn es über Rechtsklick "automatisch" aufgerufen wurde.
Was mußt du also machen, wenn du es dennoch benutzen willst? :roll:
Delphi-Quellcode:
TListBox(Sender).PopupMenu.PopupComponent := TListBox(Sender);
TListBox(Sender).PopupMenu.Popup(X, Y); |
AW: Von welcher Komponente kommt popup-Aufruf
Am saubersten wäre ja die Methode
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 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