Seite 1 von 1

Klick außerhalb des Objektes mitbekommen

Verfasst: Donnerstag 26. Juni 2008, 01:27
von nkoehring
Hallo!

In meinen Bemuehungen, das Verhalten eines Menues (wx.Menu) und einer Menubar nachzuahmen, bin ich bereits sehr weit gekommen. Im Moment haenge ich an zwei Punkten fest:

Erstens
Mein MenueKlasse erbt von wx.Frame ab. Somit wird der Fokus des Fensters an das Menue beim oeffnen uebergeben... wechsel ich nun das Menue von einem Menubar-Element zum naechsten, blinkt das uebergeordnete Fenster, da es kurz den Fokus bekommt und wieder abgibt. Kann ich das irgendwie verhindern? Direktes zurueckgeben des Fokus (parent.SetFocus()) hilft da nicht so wirklich.
Gibts da noch ne Moeglichkeit? Den Focus abweisen oder so?

Zweitens
Wie kann herausfinden, ob die Mouse außerhalb des MenuFrames geklickt wurde, so dass es sich dann schließen kann?

Besten Dank im Vorraus
NKoehring

Re: Klick außerhalb des Objektes mitbekommen

Verfasst: Donnerstag 26. Juni 2008, 10:38
von gerold
nkoehring hat geschrieben:Wie kann herausfinden, ob die Mouse außerhalb des MenuFrames geklickt wurde, so dass es sich dann schließen kann?
Hallo NKoehring!

Wenn das MenuFrame den Fokus verliert, dann wurde außerhalb geklickt. Das kannst du abfangen.
Was du nicht abfangen kannst, ist ob wirklich außerhalb geklickt wurde, da du darauf keinen Zugriff hast.
Also musst du dich darum kümmern, dass der Fokus nicht einfach so verloren gehen kann.


Zusatz:
Ein Menü ist an ein Frame gebunden -- um solche Flickereien und das Ändern der Farbe der Titelleiste, usw. zu unterbinden. Ich glaube nicht, dass es machbar ist, das Verhalten eines Menüs mit einem weiteren Frame nachzubilden. Auch mit anderen Container-Widgets wie z.B. einem Panel, ist es nicht möglich, da ein Panel nicht größer als das Frame werden kann (glaube ich).
Einzig das PopupWindow oder das PopupCtrl könnte eventuell so ein ähnliches Verhalten haben. Aber das müsste man mal ausprobieren.

Gut, ich habe es soeben ausprobiert (in der wxPython-Demo habe ich den anzuzeigenden Text verlängert). Das PopupWindow kann über das Frame hinausgehen, ohne dass der Fokus vom Frame genommen wird. :-)

mfg
Gerold
:-)

Verfasst: Montag 30. Juni 2008, 19:19
von nkoehring
Vielen Dank! Ich weiß nicht, was ich manchmal ohne deine Ratschlaege tun wuerde Gerold.

Leider verhaelt sich das PopupWindow im Moment nocht nicht so wirklich wie ich das will, aber zumindest hat es das Flackerei-Problem nicht. Ich werde weiter probieren.

Danke nochmal und beste Gruesse aus Sachsen-Anhalt.

Verfasst: Dienstag 1. Juli 2008, 21:37
von nkoehring
Also es ist nun alles wunderbar... was die Flackerei angeht. Aber scheinbar bekommt das PopupWindow keine FocusEvents :(

Kann man ihm das irgendwie beibringen? Vielleicht mit diesem ChildFocus-Dingens?

EDIT: Ja klar... logisch das er keine FocusEvents bekommt, er nimmt den Focus ja nichtmal an. Das ist auch der Grund, warum das so gut klappt, mit dem nicht-Geflicker. Ich versuche es derzeit mit CaptureMouse. Aber das will auch nicht so recht klappen. Vielleicht geht es besser?

Gruesse