HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Az egérkurzort elrejtő komponens készítése


Példaprogram letöltése

4499 bájt

A filmnéző programokban és számtalan más programban találkozhatunk olyan lehetőséggel, hogy ha nem mozgatjuk az egeret, akkor az néhány másodperc után eltűnik a képernyőről. Most készítünk egy komponenst, amely képes ennek a lehetőségnek a megvalósítására. Ha megadott ideig nem mozgatjuk az egeret, akkor a komponens eltünteti azt, egészen addig, amíg az egeret újra meg nem mozdítjuk.

A mellékelt példaprogram megnyitása előtt a MouseHide.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens Interval tulajdonságában adhatjuk meg, hogy az egérkurzor hány másodperc múlva tűnjön el a képernyőről, ha az egér egy helyben áll. Az Interval értékének megadása ugyanolyan módon történik, mint a TTimer komponens esetében. A megadott érték ezredmásodpercet jelent.
A komponens működését az Enabled tulajdonság értékének igazra vagy hamisra állításával indíthatjuk el, illetve állíthatjuk meg. Ha az Enabled értékét fejlesztési időben igazra állítjuk, akkor az egérkurzor eltüntetésének algoritmusa ott is működik.
Komponensünket a TComponent osztályból származtatjuk. A komponens működésének lényege, hogy ha az egérkurzor megadott ideig ugyanarra a koordinátára mutat, akkor azt el kell rejteni. Majd ha az egér megmozdul, akkor a kurzort ismét meg kell jeleníteni.
A Delphi-ben rendelkezésünkre áll a TMouse osztály. Az osztály a Controls unitban van implementálva. Ezt az osztályt felhasználhatjuk arra, hogy az egérkurzor aktuális pozícióját le tudjuk kérdezni. Az osztályból elég egyetlen példányt létrehoznunk, hogy a koordinátákat lekérdezhessük. Mivel az egér pozícióját sűrűn le kell kérdeznünk, célszerű létrehozni egy globális, TMouse típusú változót. Az egérkurzor X és Y pozícióját az alábbi módon határozhatjuk meg.
x:=FMouse.CursorPos.X;
y:=FMouse.CursorPos.Y;
A kurzor eltüntetését és megjelenítését a ShowCursor, API függvénnyel irányíthatjuk. A függvény igaz paraméter esetén láthatóvá teszi a kurzort, hamis érték esetén pedig eltünteti.
ShowCursor(False);
A ShowCursor függvény használata nem olyan egyszerű, mint amilyennek első ránézésre tűnik. Az egérkurzor állapotához a háttérben egy egész szám van rendelve. A kurzor akkor látható, ha ennek a számnak az értéke 0, vagy ennél nagyobb szám. Amikor meghívjuk a ShowCursor függvényt, akkor igaz paraméter esetén ez a szám eggyel nő, hamis érték esetén eggyel csökken. Ez azt jelenti, hogy ugyanannyiszor kell meghívnunk a függvényt hamis paraméterrel, ahányszor azt igaz paraméterrel hívtuk meg és fordítva.
Ennél sokkal egyszerűbb, ha a függvény használatához felveszünk egy Boolean típusú segédváltozót (FVisibleCursor). Ha a kurzor látható, akkor az FVisibleCursor értékét igazra, ha nem látható, akkor hamisra állítjuk. Felhasználva az FVisibleCursor értékét, eldönthetjük, hogy a ShowCursor metódust újra meg kell-e hívnunk, vagy sem.
if not FVisibleCursor then begin
  ShowCursor(True);
  FVisibleCursor:=True;
end;
Mint azt a fenti példa is mutatja, a ShowCursor függvény csak akkor kerül meghívásra, ha az FVisibleCursor értéke hamis. Ezzel megoldhatjuk azt, hogy ne hívjuk meg kétszer egymás után a függvényt, ugyanolyan paraméterrel.
A komponens működéséhez két Timer objektumot kell felhasználnunk. Az FCheckTimer objektumnak fél másodpercenként le kell kérdeznie az egérkurzor aktuális pozícióját. Az Interval tulajdonságban megadott idő eltelését az FTimer objektum felügyeli. Az FTimer-nek az a dolga, hogy amikor az általa mért idő letelik, tegye láthatatlanná a kurzort.
A kurzor eltüntetésének és megjelenítésének műveletét az FCheckTimer, OnTimer eseményében felügyeljük. Az FLastX és FLastY változókban eltároljuk a kurzor előző koordinátáit.
Ha az előző koordináták megegyeznek az aktuális koordinátákkal, akkor az azt jelenti, hogy az egér mozdulatlan. Ilyenkor az FTimer objektum Enabled értékét igazra kell állítanunk, hogy elinduljon az Interval tulajdonságban megadott idő múlása.
Ha az előző koordináták értéke nem egyezik meg az aktuális koordináták értékével, akkor az azt jelenti, hogy az egér megmozdult. Ilyenkor az FTimer objektum által számolt időt újra kell indítanunk, el kell mentenünk az új koordinátákat az FLastX és FLastY változókba, valamint láthatóvá kell tennünk a kurzort, ha az eddig láthatatlan volt.

Cikksorozat

#IDKategóriaCikk címeSorozat
1621DelphiMySQL szerverek elérése Delphi-ből1. rész
1632DelphiMySQL szerverek elérése Delphi-ből2. rész
1641DelphiMySQL szerverek elérése Delphi-ből3. rész
1649DelphiMySQL szerverek elérése Delphi-ből4. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 48. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |