AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Gelöst] Testen ob Popupmenu gerade angezeigt wird?

Ein Thema von Namenloser · begonnen am 15. Apr 2011 · letzter Beitrag vom 16. Apr 2011
Antwort Antwort
Seite 1 von 3  1 23      
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

[Gelöst] Testen ob Popupmenu gerade angezeigt wird?

  Alt 15. Apr 2011, 20:38
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.

Geändert von Namenloser (16. Apr 2011 um 01:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Testen ob Popupmenu gerade angezeigt wird?

  Alt 15. Apr 2011, 20:52
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
$2B or not $2B

Geändert von himitsu (15. Apr 2011 um 20:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#3

AW: Testen ob Popupmenu gerade angezeigt wird?

  Alt 15. Apr 2011, 20:56
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
Markus H.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Testen ob Popupmenu gerade angezeigt wird?

  Alt 15. Apr 2011, 20:59
@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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Testen ob Popupmenu gerade angezeigt wird?

  Alt 15. Apr 2011, 21:01
. . . wäre zuzmindest mein erster Ansatz
Man schließe das Popup irgendwie anders (ESC drücken, Woanders hinklicken oder einen Eintrag auswählen) und klicke dann irgendwann später auf seine "Fläche" ... schwupps, der erste Klick wird erstmal ignoriert.
$2B or not $2B
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Testen ob Popupmenu gerade angezeigt wird?

  Alt 15. Apr 2011, 21:07
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...
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Testen ob Popupmenu gerade angezeigt wird?

  Alt 15. Apr 2011, 21:15
Schau mal, ob Dir hier etwas hilft...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#8

AW: Testen ob Popupmenu gerade angezeigt wird?

  Alt 15. Apr 2011, 21:18
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...
funzt
Markus H.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Testen ob Popupmenu gerade angezeigt wird?

  Alt 15. Apr 2011, 21:21
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...
funzt
Das bezweifele ich gar nicht, die Frage ist nur, ob ich das für mein Szenario zurechtbiegen kann. Leider hatte himitsu anscheinend mit seiner Vermutung recht, dass das Popupmenu bereits verschwindet, bevor das OnMouseDown ausgelöst wird.

@stahli: Sieht ganz interessant aus, aber ich glaube die Lösung mit der Extra-Unit (s.o.) ist sauberer.
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#10

AW: Testen ob Popupmenu gerade angezeigt wird?

  Alt 15. Apr 2011, 21:38
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:
    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;
das Schließen des Popups über ENTER oder ESCAPE müsste dann noch per
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;
Markus H.

Geändert von markus5766h (15. Apr 2011 um 22:00 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz