Časovač
26.10.2009 23:33Časovač
Komponent časovač - Timer sa nachádza v palete komponentov System.
Je to nevizuálny komponent a teda po spustení aplikácie nebude zobrazený. Časovač si môžeme predstaviť ako hodiny, ktoré s nejakou frekvenciou "tikajú" a pri každom tiknutí môžu vykonať nejakú akciu. Frekvenciu "tikania" nastavíme v stavovej premennej Interval. Pozastavenie, resp. naštartovanie časovača môžeme urobiť logickou stavovou premennou Enabled, kde True znamená, že hodiny bežia a False znamená, že sme ich pozastavili.
Časovač má jedinú udalosť onTimer, ktorá sa naštartuje po uplynutí "tikacieho" intervalu. Zodpovedá jej procedúra Timer1Timer.
Úloha 1:
Navrhnite jednoduchý program, v ktorom sa bude plocha zapĺňať farebnými obdĺžnikmi náhodnej veľkosti každú desatinu sekundy v nej pribudne nový obdĺžnik.
Riešenie:
Začneme novú aplikáciu, vložíme do nej komponent Image a Timer. Komponentu Timer v Objektovom inšpektore nastavíme Interval na 10.
Dvojklikom na komponent Timer prejdeme do editovacieho okna a vytvoríme procedúru pre vykresľovanie vyplnených obdĺžnikov na náhodné miesto náhodnej veľkosti náhodnou farbou.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Randomize;
Image1.Canvas.Brush.Color := RGB(Random(256),Random(256),Random(256));
Image1.Canvas.Rectangle(Random(Image1.Width),Random(Image1.Height),Random(Image1.Width),Random(Image1.Height));
end;
Výsledok bude podobný nasledujúcemu obrázku:
Úloha 2
Navrhnime program, ktorý bude zobrazovať fungovanie semaforu.
Riešenie:
Začnime novú aplikáciu, položme do nej jeden komponent Shape, v Objektovom inšpektore mu zmeňme vlastnosť Shape na Circle. Podobne vložíme do formulára ďalšie dva komponenty Shape a komponent Timer. Navrhneme udalosť OnTimer nasledovne:
Pri vytváraní formulára vyfarbíme všetky tri kruhy na čierno. Potom sa bude zobrazovať fungovanie semaforu – prepínanie farieb – zo zelenej cez oranžovú na červenú a naopak. Ostatné farby budeme prefarbovať na čierno.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(i);
if i = 5 then i := 1;
case i of
1: begin
Shape1.Brush.Color := clRed;
Shape2.Brush.Color := clBlack;
Shape3.Brush.Color := clBlack;
end;
2: begin
Shape1.Brush.Color := clBlack;
Shape2.Brush.Color := clYellow;
Shape3.Brush.Color := clBlack;
end;
3: begin
Shape1.Brush.Color := clBlack;
Shape2.Brush.Color := clBlack;
Shape3.Brush.Color := clGreen;
end;
4: begin
Shape1.Brush.Color := clBlack;
Shape2.Brush.Color := clYellow;
Shape3.Brush.Color := clBlack;
end;
end;
end;
Ďalej navrhnime tlačidlo pre chodcov – SpeedButton z palety Additional. Keď ho niekto zatlačí, dobehne cyklus semaforu na červenú a potom program počká 2 sekundy a semafor sa znovu rozbehne. Na túto udalosť môžeme použiť druhý Timer, ktorý bude spolupracovať s prvým, určeným pre semafor.
var
Form1: TForm1;
i: Integer;
tlacidlo: Boolean;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(i);
if i = 5 then i := 1;
case i of
1: begin
if tlacidlo then begin
Timer1.Enabled := False;
Timer2.Enabled := True;
end;
Shape1.Brush.Color := clRed;
Shape2.Brush.Color := clBlack;
Shape3.Brush.Color := clBlack;
end;
2: begin
Shape1.Brush.Color := clBlack;
Shape2.Brush.Color := clYellow;
Shape3.Brush.Color := clBlack;
end;
3: begin
Shape1.Brush.Color := clBlack;
Shape2.Brush.Color := clBlack;
Shape3.Brush.Color := clGreen;
end;
4: begin
Shape1.Brush.Color := clBlack;
Shape2.Brush.Color := clYellow;
Shape3.Brush.Color := clBlack;
end;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if i = 1 then begin
tlacidlo := False;
Timer1.Enabled := False;
Timer2.Enabled := True;
end
else
tlacidlo := True;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Timer1.Enabled := True;
Timer2.Enabled := False;
tlacidlo := False;
end;
end.
———
Späť