Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi OnMouseOver realisieren (https://www.delphipraxis.net/25899-onmouseover-realisieren.html)

StefanDP 14. Jul 2004 15:41


OnMouseOver realisieren
 
Hi!
Gibt es eine Möglichkeit eine Art OnMouseOver-Message für ein Label (mit Bild) zu bekommen?
Laut msdn gibt es nur Messages wie .._CLICKED oder .._DBLCICKED oder so.
Oder muss ich anhand von Maus-Koordinate und Label-Größe mir meine eigene Funktion zusammenschustern?

stefan

Jörn 14. Jul 2004 16:08

Re: OnMouseOver realisieren
 
http://www.koshigaya.de/ - da gibts Komponenten die das schon können. Sind auch nur ein paar Zeilen Code, sehr elegant gelöst. Stand auch schon mal im PCMagazin.

StefanDP 14. Jul 2004 17:28

Re: OnMouseOver realisieren
 
Zitat:

Zitat von Jörn
http://www.koshigaya.de/ - da gibts Komponenten die das schon können. Sind auch nur ein paar Zeilen Code, sehr elegant gelöst. Stand auch schon mal im PCMagazin.

Sieht mir nicht wirklich nach nonVCL aus! :gruebel:

p0w3r5tr34m3r 15. Jul 2004 04:47

Re: OnMouseOver realisieren
 
dann machs halt VCL ?!
die paar KB die es ausmacht, sind doch wirklich net die welt oder ?

Powerstreamer

supermuckl 15. Jul 2004 04:50

Re: OnMouseOver realisieren
 
berechne halt ob die maus im bereich des labels steckt anhand der coordinaten o_O

Nikolas 15. Jul 2004 05:48

Re: OnMouseOver realisieren
 
Oder einfacher: OnMouseEnter bzw. OnMouseleave. Dazwischen ist die Maus auf dem Label.

teebee 15. Jul 2004 08:33

Re: OnMouseOver realisieren
 
Zitat:

Zitat von Toxman
Oder einfacher: OnMouseEnter bzw. OnMouseleave. Dazwischen ist die Maus auf dem Label.

Wenn er es Non-VCL haben will (so sieht es zumindest aus), dann hat er die Ereignisse doch gar nicht...

Ich hätte eine Idee, wie man es zumindest mal ausprobieren könnte. (Ich gehe davon aus, dass Du als Label ein Static-Control(Windows nicht Delphi) verwendest, berichtige mich, wenn es nicht so ist.)
Jetzt kommt es noch darauf an, ob Du das Control exlpizit erstellst (CreateWindow/Ex...) oder eine Dialog-Resource nimmst.
Im ersten Fall kriegst Du Das Handle des Static-Ctrls direkt zurück, im zweiten Fall musst Du in WM_INITDIALOG mit GetDlgItem das Handle abfragen.
Dann kannst Du mit GetWindowLong die Adresse der WindowProc des Statics speichern und mit SetWindowLong auf Deine eigene WindowProc verbiegen.
Dort reagierst Du auf WM_MOUSEMOVE. Beim ersten Empfang der Nachricht MouseCapture setzen, dann immer schauen, ob die Maus noch innerhalb Deines Statics ist, wenn nicht, Maus wieder freigeben.
Danach aber die alte WindowProc aufrufen, die Du zuerst gespeichert hattest.

Gruß, teebee

teebee 15. Jul 2004 16:46

Re: OnMouseOver realisieren
 
Übrigens geht es vielleicht noch einfacher, wenn Du bei WM_MOUSEMOVE des Hauptfensters mit ChildWindowFromPoint checkst, ob Du über einem Deiner Statics bist, dieses dann veränderst und alle andren auf normal setzst.

Gruß, teebee

Luckie 15. Jul 2004 16:52

Re: OnMouseOver realisieren
 
Das Zauberwort heißt MSDN-Library durchsuchenTrackMouseEvent.


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