HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Egér automatikus, animált mozgatása


Példaprogram letöltése

9469 bájt

Látványos effekt lehet egy multimédiás programban ha az egér kurzort mindig a megfelelő pozícióba mozgatjuk, például az alapértelmezett gombra. Ezt megtehetnénk úgy is, hogy egyszerűen a kívánt pozícióba helyezzük az egeret, de sokkal látványosabb, ha a kurzor "odamegy" a megfelelő pozícióba. A mellékelt komponens segítségével ezt könnyedén megoldhatjuk!
A mellékelt példaprogram megnyitása előtt a MoveMouse.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A komponens X és Y property-je határozza meg azt a képernyő memóriát, ahová az egeret el kell juttatni. A Step property megadja, hogy az adott pontot hány lépésben érjük el. Ha az értéke 1, akkor azonnal a megfelelő pozícióba kerül az egér. Az Interval határozza meg, hogy az egyes lépések között mennyi várakozási idő teljen el.
Van még három eseményünk is: az OnFinished esemény akkor következik be, ha az egér elérte a megadott koordinátát, az OnStop esemény akkor, ha a Stop metódus meghívásával állítottuk meg az egeret, az OnAbort pedig akkor, ha a felhasználó elmozgatta az egeret, és emiatt szakadt meg a mozgatás.

Az egér mozgatása az Execute metódus meghívásával kezdődik. Ebben eltároljuk az egér aktuális pozícióját a CurrX, CurrY és a StartX, StartY változókba, valamint a CStep változóba a lépések számát. Az egér pozícióját a GetCursorPos függvénnyel kérdezhetjük le, ami egy TPoint típusú paramétert vár, amiben visszaadja a koordinátákat.
procedure TAsMoveMouse.Execute;
var CurrentPosition:TPoint;
begin
    GetCursorPos(CurrentPosition);
    CurrX:=CurrentPosition.x;
    CurrY:=CurrentPosition.y;
    StartX:=CurrentPosition.x; 
    StartY:=CurrentPosition.y;
    CStep:=FStep;
Engedélyezzük a számlálót (FTimer), és beállítjuk az egyes lépések közötti időintervallumot.
    FTimer.Enabled:=True; 
    FTimer.Interval:=FInterval;
end;
Az FTimer OnTimer eseményéhez hozzárendeltük a DoTimer metódust, ami az egér mozgatását végzi. Ebben első lépésben újból lekérdezzük az egér pozícióját, amit a CurrentPosition változóban tárolunk.
procedure TAsMoveMouse.DoTimer;
var CurrentPosition:TPoint;
    StepX, StepY:integer;
begin
    GetCursorPos(CurrentPosition);
Ellenőrizzük, hogy a felhasználó nem mozgatta-e el az egeret időközben. Ha elmozgatta, akkor a mozgatást megállítjuk (Ftimer=False), és generálunk egy OnAbort eseményt. Az egér előző pozícióját mindig, a CurrX és a CurrY változókban tároljuk!
    if ((CurrentPosition.x<>CurrX) or 
      (CurrentPosition.y<>CurrY)) then
    begin
        FTimer.Enabled:=FALSE;
        if Assigned(FOnAbort) then FOnAbort(Self);
    end else
Ha nem szakították meg a mozgatást, akkor kiszámoljuk a következő koordinátát. Kiszámoljuk, hogy mennyivel kell elmozgatni az egeret X és Y irányba, és az eredményt a StepX és StepY változókban tároljuk. A CurrX és CurrY változókat megnöveljük (ill. csökkentjük negatív érték esetén) a StepX és StepY értékekkel, majd az egeret a SetCursorPos függvénnyel az új koordinátákra mozgatjuk.
    begin
        StepX:=(FEndX-CurrX) div CStep;
        StepY:=(FEndY-CurrY) div CStep;

        Inc(CurrX, StepX);
        Inc(CurrY, StepY);
    
        SetCursorPos(CurrX, CurrY);
Csökkentjük a lépésszámot, amit a CStep változóban tároltunk. Ha a CStep értéke 0, akkor elértük a megfelelő pozíciót, és megállíthatjuk a mozgatást (FTimer.Enabled:=False). Az egeret még a biztonság kedvéért az FEndX és FEndY koordinátákra mozgatjuk (bár elvileg ott is van), és generálunk egy OnFinished eseményt. Az FEndX és FEndY változók az X és Y property-ken keresztül kapnak értéket!
        Dec(CStep);
        if CStep=0 then
        begin
            SetCursorPos(FEndX, FEndY);
            FTimer.Enabled:=False;
            if Assigned(FOnFinished) then FOnFinished(Self);
        end;
    end;



Cikksorozat

#IDKategóriaCikk címeSorozat
3333WindowsNet Shell parancsok1. rész
3367WindowsNet Shell parancsok2. rész
3396WindowsNet Shell parancsok3. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 223. 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 |