
A mellékelt példaprogram megnyitása előtt a CountDown.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens Time tulajdonságán keresztül adhatjuk meg azt az időt, ahonnan visszafelé akarunk számolni. A Font tulajdonság beállításával és a komponens méretének megváltoztatásával állíthatjuk be a kijelző nagyságát. Az óra akkor indul el, amikor az Enabled tulajdonságot igazra állítjuk. Az Enabled tulajdonság hamisra állításával bármikor megállíthatjuk, majd azt újra igazra állítva ismét elindul.
Az órát bármikor újraindíthatjuk a Restart metódussal. Ha kíváncsiak vagyunk az éppen mutatott időre, akkor azt a GetTime metódussal lekérdezhetjük.
A komponens rendelkezik egy OnTimer eseménnyel, amely minden egyes másodpercben létrejön. Amikor az idő lejárt, létrejön az OnStop esemény.
A komponenst a TGraphicControl osztályból származtatjuk.
Az épp aktuális idő tárolására létrehozunk egy új típust.
TCountTime = record
Hour: ShortInt;
Min: ShortInt;
Sec: ShortInt;
end;
Az FCountTime, TCountTime típusú változó fogja tárolni az éppen aktuális időt. Az idő csökkentéséhez szükséges egy TTimer objektum is. Ennek az OnTimer eseményében csökkentjük az FCountTime értékét, valamint itt kell gondoskodnunk az OnTimer és OnStop események létrejöttéről is.
if Assigned(FOnStop) then FOnStop(Self);
if Assigned(FOnTimer) then FOnTimer(Self);
Ha az idő letelik, akkor az Enabled tulajdonság értékét hamisra kell állítani.
Az FCountTime változó a SetTime metódusban kapja meg kezdő értékét.
procedure TCountDown.SetTime(Value: TTime);
var
s: String;
begin
FTime:=Value;
s:=TimeToStr(Value);
with FCountTime do begin
if Length(s)=8 then Hour:=StrToInt(s[1]+s[2])
else Hour:=StrToInt(s[1]);
...
Mivel a Time tulajdonság TTime típusú, ha szöveggé konvertáljuk 7 vagy 8 jegy hosszúságú szöveget kaphatunk. Az óra rész ugyanis egy vagy két karakteres lehet, a többi mindig kettő. Ennek megfelelően kell meghatároznunk az órát, percet és másodpercet.
Az időzítő megrajzolását és frissítését a Paint metódus felülírásával tudjuk megvalósítani. Az idő kiírásához a TCanvas osztályt fogjuk használni. Azért, hogy a komponens méretéhez viszonyítva, mindig középen helyezkedjen el az idő, relatív koordinátákat kell számolnunk az alábbi módon.
Canvas.TextOut(Width div 2-Canvas.TextWidth(s) div 2,Height div 2-Canvas.TextHeight(s) div 2,s);
Fontos, hogy mindig két karakteren írjuk ki az órát, percet és másodpercet. Ehhez ellenőriznünk kell az egyes időegységek hosszát.
if Length(IntToStr(Sec))=2 then s:=s+IntToStr(Sec)
else s:=s+'0'+IntToStr(Sec);
Az idő lekérdezését a GetTime függvénnyel tehetjük meg. Itt nem kell ügyelnünk a két karakter hosszú időegységekre, mert a függvény visszatérési értéke TTime. Az alábbi konvertálás úgyis két karakter hosszúvá alakítja át a percet és a másodpercet.
A Restart metódusban az idő újraindításához egyszerűen meg kell hívnunk a SetTime metódust.