Delphi - Az egér "lebegés" eseményének felhasználása

forráskód letöltése
A Windows-ban található egy olyan esemény, melyet általában elég ritkán találhatunk meg a Delphi komponenseiben. Ez az esemény a "lebegés". Akkor jön létre mikor az egérrel megállunk egy-egy objektum felett és így egyhelyben állva eltelik egy előre megadott idő.

Képzeljük el azt, hogy lenne egy olyan feladatunk, hogy ha az egérrel rámutatunk egy TLabel komponensre, akkor annak betűtípusa legyen vastag. Ennek megoldása nem lenne nagy probléma. Felhasználva az OnMouseMove eseményt beállítanánk a kívánt betűtípust.

Tovább bonyolítva a helyzetet most az lenne a feladat, hogy csak akkor legyen vastag a betűtípus, ha az egérrel már fél másodperc óta mozdulatlanunk a komponens felett áll a felhasználó.

Ez még szintén megoldható az OnMouseMove eseménnyel. Annak létrejöttekor elindíthatunk egy TTimer komponenst és az idő letelte után állítjuk át a betűtípust. Itt viszont már problémákba ütköznénk. Ha elindítjuk a TTimer-t, de a felhasználó közben elmozgatja az egeret egy másik komponens fölé, akkor le kellene állítanunk a számlálást és egy másik komponensnél újra kezdeni azt. Másik gond, ha szintén elmozdítja az egeret, de a komponens felett marad, akkor ismét létrejön az OnMouseMove esemény, ugyanahhoz a komponenshez. Szóval így már problémásabb a helyzet. Nem beszélve arról, hogy ha vastag lett a komponens betűtípusa, de a felhasználó elmozdítja másik komponens fölé az egeret, akkor vissza kellene állítani a betűtípust az eredeti értékre.

De minek szenvedni a TTimer-el, ha nincs is rá egyáltalán szükség, mivel ezt elvégzi helyettünk a Windows, csak meg kell rá kérnünk. Mellékelt példa megnyitása előtt a HoverLabel.pas-ban lévő komponenst telepítenie kell a Delphi alá.

Ez az új komponens egy TLabel-ből származik. Egyetlen új property-e egy HoverTime-nak nevezett integer típusú property. Itt adhatjuk meg ezredmásodpercben, hogy mennyi idő elteltével jöjjön létre a lebegés eseménye, vagyis a WM_MOUSEHOVER.

Az időzítés indításához tudnunk kell, hogy mikor érkezik az egér a komponens fölé. Ehhez a CM_MOUSEENTER eseményt használjuk fel. Itt a TrackMouseEvent függvényhívással megkérjük a Windows-t, hogy szóljon, vagyis generáljon WM_MOUSEHOVER eseményt alkalmazásunk számára akkor, ha letelik a megadott idő.

A WM_MOUSEHOVER eseményt a DoHover eljárásunk kezeli le. Itt csak át kell állítani a betűtípust vastagra.

Végül már csak annyi van hátra, hogy visszaállítsuk az eredeti betűtípust akkor, ha az egér elhagyta a komponens területét. Ehhez a CM_MOUSELEAVE eseményt használhatjuk fel.