Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TPopupMenu schließen bei Verlassen des Mauszeigers (https://www.delphipraxis.net/172050-tpopupmenu-schliessen-bei-verlassen-des-mauszeigers.html)

kurt 11. Dez 2012 10:43

TPopupMenu schließen bei Verlassen des Mauszeigers
 
Hallo
wie kann ich das Verlassen eines PopupMenu's erkennen ?
Sinn ist - das PopupMenu soll nach Verlassen mit der Maus geschlossen werden.

Delphi XE2 win32

Danke
Grüße Kurti

stahli 11. Dez 2012 11:35

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Das ist vermutlich schwierig.
Wir hatten mal das Thema, wie man das schließen eines Popups erkennen kann: http://www.delphipraxis.net/7535-tpo...-abfragen.html
Vielleicht findest Du über die Schiene einen Hinweis.
Evtl. auf MouseOver in der Application prüfen...


EDIT: Wobei man sich überlegen sollte, ob man am Standardverhalten wirklich etwas ändern will. Wenn Menüs zu schnell zuklappen kann das schon lästig werden.

kurt 11. Dez 2012 14:15

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Gurke da schon lange rum ,, und immer wieder wird's ein Thema.
Keine Windows Nachricht die abgefangen und ausgewertet werden kann ??
Schxxxxxxxx.......... :-)

Danke für die Nachricht

Pfaffe 19. Feb 2017 22:06

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Sorry, 4 Jahre später und ich suche ebenfalls nach "das PopupMenu soll nach Verlassen mit der Maus geschlossen werden.".

EWeiss 20. Feb 2017 04:03

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Ich verstehe die Frage nicht so recht.

Ein PopupMenu öffnet ich ja im Normalfall mit rechtsklick auf einem Control wenn ein PopupMenu dafür vorgesehen ist.
Und das bleibt solange offen bis das Control den Focus verliert.

Was du vielleicht machen könntest prüfen ob sich deine Maus noch im Client Bereich befindet.
Wenn nicht dann schicke eine Message WM_ACTIVATE an das HauptFenster.

Danach sollte das Menü eigentlich zuklappen da es den Focus verliert.

Ob du jedoch nach TrackPopupMenuEx noch einen zugriff auf die anderen Windows erhältst kann ich jetzt ohne
es selbst zu testen nicht genau sagen.

Ich glaube das geht so nicht.

EDIT:
Wirst du dir wohl ein eigenes Modales OnTop Window erstellen müssen.


gruss

EWeiss 20. Feb 2017 06:49

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Hat mich jetzt mal Interessiert.
Versuch das mal.

gruss

Pfaffe 20. Feb 2017 08:29

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
"Normal": Normal wird nicht gewünscht:-)
Das Menü wird per DropDownMenu.Popup(Pt.X, Pt.Y) geöffnet. Sobald sich die Maus außerhalb des Menüs befindet, soll es sich, ohne Klick, wieder schließen.
Zitat:

Wirst du dir wohl ein eigenes Modales OnTop Window erstellen müssen.
So sehe ich es auch.
Danke für die Antworten.

EWeiss 20. Feb 2017 08:36

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Zitat:

Sobald sich die Maus außerhalb des Menüs befindet, soll es sich, ohne Klick, wieder schließen.
Wo ist das Problem tut es bei mir.
Da steht nirgendwo das es sich um ein DropDownMenu handelt die Frage war "TPopupMenu schließen bei Verlassen des Mauszeigers"

Und das ist was ich hier erstellt habe.
Und das schließt sich ohne klick von alleine.

gruss

EWeiss 20. Feb 2017 08:46

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Denke du meinst so etwas..
Ja das geht bei mir auch Automatisch zu ohne das ich klicken muss sobald die Maus die Form verlässt.
Aber sorry nein den Quelltext werde ich nicht veröffentlichen.

Da must du leider selber bauen.

gruss

Pfaffe 20. Feb 2017 09:14

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Ich habe Deine Project1.exe ausprobiert, da schließt sich nix ohne klick.
Mein neuer Versuch ohne TPopUpMenu: Panel mit Buttons, wobei das Panel automatisch ein- bzw. ausgeblendet wird, je nachdem wo sich der Mauscursor befindet.

EWeiss 20. Feb 2017 09:14

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Zitat:

Ich habe Deine Project1.exe ausprobiert, da schließt sich nix ohne klick.
Sorry kann dir jetzt nicht extra ein Video anfertigen um das zu beweisen das es bei mir sehr wohl alleine schließt.
Wenn die Zeit von 100ms überschritten wird und sich die Maus nicht über dem Menü befindet.

DropDownMenu
Mit kleiner Änderung geht das auch.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  PT: TPoint;
begin

  Pt := Button1.ClientToScreen(Point(0, Button1.ClientHeight));
  Button1.DropDownMenu := PopupMenu1;
  Button1.DropDownMenu.Popup(Pt.X ,Pt.y);
end;
Sobald ich auf den Button klicke bleibt das Menü 100ms offen es sei denn die Maus befindet sich auf dem Menü
dann wird es geschlossen sobald die Maus das Menü verlässt.

gruss

stahli 20. Feb 2017 09:50

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Liste der Anhänge anzeigen (Anzahl: 1)
Sowas: http://www.delphipraxis.net/1213706-post18.html ?

Ich hänge mal die Quelle an.
Das stammt aus einem alten FMX-Databinding-Framework. Direkt verwenden kannst Du es so nicht, aber vielleicht taugt es als Anregung.

EWeiss 20. Feb 2017 09:54

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Zitat:

Zitat von stahli (Beitrag 1362124)
Sowas: http://www.delphipraxis.net/1213706-post18.html ?

Ich hänge mal die Quelle an.
Das stammt aus einem alten FMX-Databinding-Framework. Direkt verwenden kannst Du es so nicht, aber vielleicht taugt es als Anregung.

Wo ist das Problem funktioniert mein Beispiel bei dir auch nicht ? LOL.

gruss

stahli 20. Feb 2017 10:26

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Habe ich nicht versucht und ich dachte, Du wolltest den Quelltext nicht rausgeben.
Egal, Kurt kann sich ja das passende raussuchen...

EWeiss 20. Feb 2017 10:28

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Zitat:

Zitat von stahli (Beitrag 1362130)
Habe ich nicht versucht und ich dachte, Du wolltest den Quelltext nicht rausgeben.
Egal, Kurt kann sich ja das passende raussuchen...

Ich meinte den von meiner SkinEngine.
Nicht diesen hier vom Sample.

Aber richtig, kann er ;) (Pfaffe) Kurt interessiert das schon seit Jahren nicht mehr.

gruss

Pfaffe 20. Feb 2017 10:34

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Das letzte Beispiel funktioniert, genauso so wie ich es benötige.
Ich vermute, dass ein Timer im Spiel ist und immer wenn die Maus auf einem Menüeintrag ist, wird der Timer neu gestartet.

EWeiss 20. Feb 2017 10:39

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Zitat:

Zitat von Pfaffe (Beitrag 1362134)
Das letzte Beispiel funktioniert, genauso so wie ich es benötige.
Ich vermute, dass ein Timer im Spiel ist und immer wenn die Maus auf einem Menüeintrag ist, wird der Timer neu gestartet.

Na dann, das erste ging vorher auch.
Hier ist die Quelle, aber nicht das Projekt damit du auch noch was zu tun hast.
Habe es unten angehängt.


bin dann raus aus dem Thread

gruss

Pfaffe 20. Feb 2017 10:51

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
SendMessage(PopupMenu1.WindowHandle, WM_IME_KEYDOWN, VK_ESCAPE, 0);
Danke, hast mir sehr geholfen.

EWeiss 20. Feb 2017 10:58

AW: TPopupMenu schließen bei Verlassen des Mauszeigers
 
Zitat:

Zitat von Pfaffe (Beitrag 1362136)
SendMessage(PopupMenu1.WindowHandle, WM_IME_KEYDOWN, VK_ESCAPE, 0);
Danke, hast mir sehr geholfen.

Kein Problem ;)
Das ist der Vorteil wenn man sich mit der WinApi32 auskennt.

Habe den Source doch noch angehängt.
Und die anderen gelöscht.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 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