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;