|
|
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;
|
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!
|