HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

ScrollBox automatikus görgetése kör alakban


Példaprogram letöltése

8574 bájt

Érdekes és látványos effektet hozhatunk létre, ha megvalósítjuk azt, hogy egy ScrollBox görgető sávjait úgy mozgatjuk programból, hogy a benne lévő tartalom kör alakban mozogjon, villogásmentesen.
A mozgatás léptetéséhez egy Timer időzítőt használunk. Ennek OnTimer eseményénél fogjuk a következő lépés mértékét kiszámítani és a ScrollBox-ot léptetni.
Szükségünk lesz egy globális integer változóra, melyet léptetünk minden OnTimer eseménynél. Ez lesz a FI nevű változó, melynek értékére úgy tekintünk, hogy az 0 és 359 fok között adja meg az aktuális szöget a kör alakú mozgatáshoz.
procedure TForm1.Timer1Timer(Sender: TObject);
…
A mozgáshoz szükségünk lesz a teljes terület negyedének értékére. Ez az a terület lesz, mely a ScrollBox nem látható területének teljes szélessége és magassága.
  ax:=ScrollBox1.HorzScrollBar.Range div 4;
  ay:=ScrollBox1.VertScrollBar.Range div 4;
A következő lépésben kiszámítjuk a két scrollbar aktuális pozícióját. FI értékét mint fok értéket konvertáljuk radiánná és ennek kiszámítjuk az x koordinátához a koszinuszát, míg az y-hoz a szinuszát. A kapott értéket kell megszorozni a szélesség, illetve a magasság egynegyedével és ehhez még hozzáadni az egy negyed értéket. Ezzel biztosítjuk azt, hogy a kapott eredmény mindig pozitív szám lesz, mely nulla és a ScrollBox szélessége, illetve magassága közötti értéken fog mozogni.
  x:=Round(cos(DegToRad(FI))*ax+ax);
  y:=Round(sin(DegToRad(FI))*ay+ay);
…
Ez követően már csak a megfelelő pozícióra kell állítanunk két a ScrollBar-t a ScrollBox-ban. Ehhez küldünk egy WM_VSCROLL és egy WM_HSCROLL üzenetet a ScrollBox-nak. Az üzenetben a wParam értékének alsó 16 bitjébe kerül a SB_THUMBPOSITION konstans értéke, mely arra utasítja majd a ScrollBar-t, hogy a wParam felső 16 bitjében lévő értékre pozícionálja a ScrollBar-t. Ahhoz, hogy az x és y értéke a felső 16 bitbe kerüljön, megszorozzuk az értéküket 65536-al.
  SendMessage(ScrollBox1.Handle, WM_VSCROLL, SB_THUMBPOSITION+x*65536, 0);
  SendMessage(ScrollBox1.Handle, WM_HSCROLL, SB_THUMBPOSITION+y*65536, 0);
  inc(FI);
end;




Cikksorozat

#IDKategóriaCikk címeSorozat
3916WindowsA javascript nyelv bemutatása1. rész
3946WindowsJavascript változók és operátorok2. rész
3975WindowsKódvezérlés JScript-ben3. rész
4004WindowsFüggvények és objektumok4. rész
4036WindowsFejlett funkciók a JavaScript nyelvben5. rész
4066WindowsFejlett funkciók a JavaScript nyelvben - folytatás6. rész
4116WindowsReguláris kifejezések7. rész
4145WindowsReguláris kifejezések - folytatás8. rész


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