![]() |
[Gelöst] Testen ob Popupmenu gerade angezeigt wird?
Hallo,
In meinem Programm kann man auf einer Fläche Objekte selektieren. Mit der rechten Maustaste kann man außerdem ein Kontextmenü aufrufen, um mit diesen Objekten etwas zu machen. Normalerweise (wenn kein Kontextmenü angezeigt wird) wird bei einem Linksklick auf die Fläche die Selektion zurückgesetzt. Wenn man aber „aus dem Kontextmenü heraus“ einen Klick tätigt, um selbiges zu schließen, soll die Selektion erhalten bleiben. Dazu müsste ich irgendwie abfragen, ob zum Zeitpunkt des Klicks das Kontextmenü geöffnet war. Wie mache ich das? Habe im Internet nichts gefunden... Vielen Dank im Voraus. |
AW: Testen ob Popupmenu gerade angezeigt wird?
Hmmm, wenn das Klick-Ereignis bei deiner Fläche ankommt, dann ist das Popup-Menü schon "lange" zu.
Du könntest mal sehenm ob dein Popupmenü ein Ereignis hat, welches beim Schließen ausgelöst wird und von dieser Stelle aus den Klick irgendwie abfangen, bevor er in deiner "Fläche" ankommt. (Notfalls ein Fläg setzen, daß der nächste Klick nicht gezählt wird. Oder falls das Klick-Ereignis doch bei deiner "Fläche ankommt, bevor das "ich wurde grade geschlossen"-Ereignis des Popups durchkommt, dann kannst du im "ich werde jetzt angezeigt"-Ereignis des Popups eine Variable setzen, dieses beim Ausblenden wieder zurücksetzen und im OnKlick der "Fläche" entsprechend reagieren. [add] eventuell hilft Application.PopupControlWnd |
AW: Testen ob Popupmenu gerade angezeigt wird?
Hallo,
falls Du bei Deinen Objekten das Ereignis 'MouseDown' oder 'OnClick' nutzen kannst : eine Variable (Boolean) bei Popup.OnPopup auf True setzen und bei z.B. MouseDown Deiner Objekte nach der Auswertung (Selektionsaufhebung . . .) wieder auf False setzen. . . . wäre zuzmindest mein erster Ansatz |
AW: Testen ob Popupmenu gerade angezeigt wird?
@himitsu: Das ist das Problem: Es gibt anscheinend auch kein Ereignis beim Schließen.
@beide Außerdem erscheint mir eine solche Lösung unsauber, weil es ja mehr als einen Weg gibt, ein Popupmenü zu schließen. Der Klick soll aber nur dann „ignoriert“ werden, wenn er selbst zum Schließen des Menüs führt. |
AW: Testen ob Popupmenu gerade angezeigt wird?
Zitat:
|
AW: Testen ob Popupmenu gerade angezeigt wird?
Okay, ich habe jetzt diesen Thread hier gefunden: Prüfen, ob ein Popupmenü geöffnet ist
Bin aber noch nicht sicher, ob mir das weiterhilft... |
AW: Testen ob Popupmenu gerade angezeigt wird?
Schau mal, ob Dir
![]() |
AW: Testen ob Popupmenu gerade angezeigt wird?
Zitat:
|
AW: Testen ob Popupmenu gerade angezeigt wird?
Zitat:
@stahli: Sieht ganz interessant aus, aber ich glaube die Lösung mit der Extra-Unit (s.o.) ist sauberer. |
AW: Testen ob Popupmenu gerade angezeigt wird?
O.K.
wenn ich nun nicht prüfen kann (jedenfalls nicht so einfach), ob ein Popup-Menü geschlossen wurde - dann doch zumindest, ob vorher eines geöffnet wurde . . . oder mach' ich da jetzt einen Denkfehler ?
Code:
das Schließen des Popups über ENTER oder ESCAPE müsste dann noch per
uses . . ., ExPopupList;
Pop : Boolean; procedure CMMenuClosed(var Msg: TMessage ); message CM_MENUCLOSED; procedure CM_ENTERMENULOOP(var Msg: TMessage ); message CM_ENTERMENULOOP; procedure TForm1.CMMenuClosed(var msg: TMessage); begin // nothing end; procedure TForm1.CM_ENTERMENULOOP(var Msg: TMessage); begin Pop := True; end; procedure TForm1.FormCreate(Sender: TObject); begin Pop := False; end; procedure TForm1.Panel2Click(Sender: TObject); begin if Pop then ShowMessage('Popup') else ShowMessage('No Popup'); Pop := False; end; OnKeyDown ausgewertet werden.
Code:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if (Key = VK_Return) or (Key = VK_Escape) then Pop := True; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 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