Entwickler-Ecke

Windows API - Verhindern, dass Objekte MouseOver-Event erhalten


O'rallY - Sa 17.07.04 11:52
Titel: Verhindern, dass Objekte MouseOver-Event erhalten
Wie kann ich verhindern, wenn man die Maus z.B. über ein Mainmenu bewegt, dass dieses darauf mit einem Highlight reagiert. Ich will also verhindern, dass nichts neu gezeichnet wird, wenn die Maus drüber ist.

Eigentlich will ich komplett verhindern, dass noch irgendein Objekt/Window eine Nachricht erhält, die durch die Maus ausgelöst wird. Mausklick lassen sich ja leicht mit einem globalen Maushook abfangen, Mausbewegungen allerdings nicht.

Ich hatte das bislang mit einer unsichtbaren Form gelöst, die über den Bildschirm gelegt wird. Jedoch ist eine deutliche Verzögerung zu spüren, wenn die Form in der Vordergrund geschoben wird.

Fällt euch eine bessere Lösung ein?


maxk - Sa 17.07.04 17:07

Suche in: Delphi-Forum, Delphi-Library CLIPCURSOR fängt die Maus in einem Rechteck fest, dann kann Sie nicht mehr bewegt werden (wenn das Rechteck klein genug ist :wink: )


O'rallY - So 18.07.04 12:25

Vielleicht sollte ich noch dazu sagen, dass man die Maus noch bewegen können muss ;). Sorry. Trotzdem danke.

Ich dachte mir vielleicht, dass ich mittels eines WH_GETMSG-Hooks, WM_MOUSEMOVE-Messages derart modifizieren könnte, dass der Anschein entsteht, dass sich die Maus nicht bewegt. Jedoch scheint die Modifizierung nicht zu funktionieren.
Jedenfalls bringt eine Veränderung der TMsg-Struktur, auf die der lParam-Parameter zeigt, scheinbar keine Veränderung.


SvenAbeln - Mo 19.07.04 12:10

Hallo,

schau dir doch mal OnMessage von TApplication an, dort kannst du alle Messages abfangen und behandeln.
Dort setzt du für WM_MouseMove einfach Handled:=true und die Message wird nicht weiter gereicht.

Gruß,

Sven


O'rallY - Di 20.07.04 14:03

Es geht mir ja nicht nur um meine eigene Anwendung, sondern um alle Anwendungen. Daher wollte ich ja mit einem globalen GetMsg-Hook arbeiten.