procedure TScrollTitles.DoTimer;
begin
Dec(FYPos);
if FYPos<=(-abs(Font.Height)-2) then begin
FYPos:=0;
inc(FTopLine); if FTopLine>=FTitles.Count then FTopLine:=0;
end;
Invalidate;
end;
A komponens kirajzolását most is a Paint metódus végzi. Ebben ellenőrizzük, hogy van-e egyáltalán megjelenítendő sor, és ha nincs, akkor kilépünk.
procedure TScrollTitles.Paint;
…
Canvas.Brush.Style:=bsClear;
Canvas.Font.Assign(Font);
yp:=FYPos; lp:=FTopLine;
A sorok megrajzolását addig végezzük, amíg az yp változó értéke kisebb, mint a komponens magassága. Az xp változó a felirat x koordinátája. Minden sor középre lesz igazítva, ezért az értékét ennek megfelelően számoljuk ki. Az yp változót a sor magassága+2-vel növeljük. Az lp változó értékét is folyamatosan növeljük figyelve arra, hogy ne lépje túl a megjeleníthető sorok számát. Ha ez megtörténik, akkor 0 értéket adunk neki, amivel azt érjük el, hogy az utolsó sor megrajzolása után újból az első sor kerül sorra.
while yp<Height do begin
if lp>FTitles.Count-1 then lp:=0;
xp:=Width div 2 - Canvas.TextWidth(FTitles[lp]) div 2;
Canvas.TextOut(xp, yp, FTitles[lp]);
inc(yp, abs(Font.Height)+2); inc(lp);
end;
end;