Timer
Príklad 1. - Vykresľovanie útvarov
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
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
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.)
|
|