Č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äť

Vyhľadávanie

(c) 2008 Všetky práva vyhradené.