Timer


Príklad 1. - Vykresľovanie útvarov
Príklad 2. - Semafór
Úlohy na riešenie


Príklad 1. - Vykresľovanie útvarov      Nahor

Navrhnime jednoduchý program, v ktorom sa bude plocha zapĺňať farebnými obdĺžnikmi náhodnej veľkosti - napr. každú desatinu sekundy v nej pribudne nový obdĺžnik.
Výsledok projektu predstavuje obrázok:

Ako zabezpečiť, aby sa niečo dialo pravidelne bez zásahu používateľa?

Používa sa na to komponent Časovač - Timer z palety System, je to neviditeľný komponent, ktorý sa pri kompilácii nezobrazí, ale môžeme sa naň v programe odvolávať - udalosť OnTimer. Časovač si môžeme predstaviť ako hodiny, ktoré s nejakou frekvenciou "tikajú" - pri každom tiknutí môžu vykonať nejakú akciu. Frekvenciu "tikania" nastavíme v stavovej premennej Interval, pozastavenie / naštartovanie časovača môžeme urobiť logickou stavovou premennou Enabled - true znamená, že hodiny bežia, false znamená, že sme ich pozastavili.

RIEŠENIE:
Začnime novú aplikáciu, štandardne do nej položme Image, prípadne si zadefinujte skratku na jeho Canvas, projekt uložme.

Položme do formulára komponent Timer, pozrime si jeho Property v Objektovom inšpektore a nastavte Interval na 10.

Dvojkliknime vo formulári na spomínaný komponent a v editovacom okne Unitu zadefinujte príslušné správanie - vykresľovanie vyplnených obdĺžnikov (príkaz FillRect) na náhodné miesto náhodnej veľkosti náhodnou farbou (funkcie RGB a Random).




Príklad 2. - Semafór      Nahor

Navrhnime program, ktorý bude zobrazovať fungovanie semafóru.

Pri riešení budeme potrebovať kresliť kružnice? V minulých aktivitách sme videli vykresľovanie kružníc do Image. Ak však chceme jednoduché tvary ako napr. štvorec, kružnicu..., môžeme použiť aj komponent Shape z palety Additional.

RIEŠENIE:
Začnime novú aplikáciu, položme do nej jeden Shape, v Objektovom inšpektore mu zmeňme property Shape na Circle. Podobne dajme do formulára ďalšie dva komponenty Shape - komponenty sa dajú aj kopírovať!

Ďalej vložte do formuláru Timer a navrhnite udalosť OnTimer.

Pri vytváraní formulára všetky 3 kruhy vyfarbite na čierno. Potom nech sa zobrazuje fungovanie semafóru - prepínanie farieb - zo zelenej cez oranžovú na červenú a naopak. Nezabudnite ďalšie farby prefarbovať na čierno.

Na vyfarbenie kruhov použite jeho property Brush.Color, ktorú môžete nastaviť v Objektovom inšpektore, ale aj priamo v programe: Shape1.Brush.Color:=clRed;


Ďalej navrhnite tlačidlo pre chodcov - SpeedButton z palety Additional, pozrite si jeho property Down. Keď ho niekto zatlačí, dobehne cyklus semafóru na červenú a potom program počká, napr. jednu sekundu a semafór sa znovu rozbehne. Na túto udalosť môžete použiť druhý Timer, ktorý bude spolupracovať s prvým, ktorý je určený pre semafór. Využite property Enabled oboch časovačov.



Úlohy na riešenie      Nahor

1. Vytvorte projekt, ktorý spustí prostredníctvom timera vykresľovanie náhodne hrubých čiar na náhodné miesto v odtieňoch červenej, čím získate efektné obrázky. Vykresľovanie ukončite vloženým tlačidlom.
2. Vytvorte projekt, ktorý bude simulovať pohyby meteoru na povrch Zeme.
Pri riešení využite telá metód - konštruktora, deštruktora a udalosti OnTimer časovača...
procedure TForm1.FormCreate(Sender: TObject);
begin
  g:=Image1.Canvas;
  X:=Image1.Width div 2;
  Y:=Image1.Height div 2;
  Pozadie:=TBitmap.Create;
  Pozadie.LoadFromFile('obrazky\Zem.bmp');
  Meteor:=TBitmap.Create;
  Meteor.LoadFromFile('obrazky\Meteor.bmp');
  Meteor.TransparentColor:=clWhite;
  Meteor.Transparent:=True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Meteor.Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  g.Draw(0,0,Pozadie);
  g.Draw(X-Meteor.Width div 2,Y-Meteor.Height div 2,Meteor);
  X:=X+4;
  Y:=Y+2;
  if X<0 then X:=X+Image1.Width;
  if X>=Image1.Width then X:=X-Image1.Width;
  if Y<0 then Y:=Y+Image1.Height;
  if Y>=Image1.Height then Y:=Y-Image1.Height;
end;
3. Vytvorte projekt, ktorý bude zobrazovať na grafickej ploche pohyb guličky, ktorá sa bude vo vhodných časových intervaloch pohybovať po sinusoide. (Guličku nahraďte obrázkom chrobáka, prípadne dokreslite pozadie a načítajte bitmapový obrázok do grafickej plochy.)

Edit a label Obsah Práca s myšou