Lucrarea nr. 10

Crearea obiectelor Delphi în timpul execuţiei

-> o componentă Tbutton a carei Caption se iniţializează cu ‘Extrage’

 

-> Se aduc pe formular o componentă de tip TstringGrid (din pagina de componente Aditional) pentru care se modifică proprietăţile FixedCols şi FixedRows la 0

 

-> Se schimbă proprietatea Name a formularului în Loto

 

-> Se declară la secţiunea private variabilele Prima de tip Boolean şi Buton de tip şir de la 1 la 5 de componente TBitBtn ( Array[1..5] of TbitBtn )

 

-> Se adaugă la lista uses, de la secţiunea interface, cuvântul cheie Buttons

 

->Se generează evenimentul Form Create. În cadrul acestui eveniment se iniţializează variabila Prima cu valoarea True şi se apelează generatorul de numere aleatoare (Randomize;)

 

-> Se generează evenimentul FormActivate unde se declară variabila locală i de tip integer. Tot aici se iniţializează pentru componenta StringGrid proprietăţile Width la 245, Height la 100, ColCount la 15, RowCount la 6, lăţimile şi înălţimile tuturor celulelor la 15, numele fontului la Times New Roman, culoarea fontului la Blue, mărimea fontului la 8, şi se iniţializează toate celulele cu numărul corespunzător poziţiei în obiectul StringGrid:

 

with StringGrid1 do

begin

Width:=245;

Height:=100;

ColCount:=15;

RowCount:=6;

for i:=0 to ColCount-1 do ColWidths[i]:=15;

for i:=0 to RowCount-1 do RowHeights[i]:=15;

Font.Name:='Times New Roman';

Font.Color:=clBlue;

Font.Size:=8;

for i:=0 to 89 do

Cells[(i mod 15), (i div 15)]:=IntToStr(i+1);

end;

 

-> Se generează evenimentul Button1Click în cadrul căruia se declară variabilele locale Act, i, j, k de tip Byte, Wins de tip şir de la 1 la 5 de tip Byte (Array[1..5] of Byte) şi Extras de tip set of Byte:

 

var

Act, i, j, k:Byte;

Wins: array [1..5] of Byte;

Extras: set of Byte;

 

Tot aici se tratează extragerea propriu-zisă :

-         dacă nu suntem la prima extragere trebuie să eliberăm memoria alocată obiectelor create dinamic la extragerea anterioară:

 

if not Prima then

for i:=1 to 5 do Buton[i].Free;

-         se goleşte lista de numere extrase

 

Extras:=[];

 

-         se face extragerea propriuzisă şi pentru fiecare număr extras, dacă nu a mai fost extras la tragerea curentă, se memorează în şirul Wins[] şi în lista de numere extrase:

 

j:=0;

while j<5 do

begin

Act:=Random(90)+1;

if not (Act in Extras) then

begin

j:=j+1;

Wins[j]:=Act;

Extras:=Extras+[Act];

end;

end;

 

-         se creează cele cinci butoane de tip TBitBtn din şir cu părintele Self (el însuşi), apoi, în funcţie de valorile din şirul Wins se calculează indicii j şi k ai celulei din StringGrid unde urmează să fie poziţionat şi se setează pentru fiecare dintre butoane proprietăţile Left, Top, Width, Height, Font.Name, Font.Size, Font.Color şi Caption.

 

for i:=1 to 5 do

begin

Buton[i]:=TBitBtn.Create(Self);

Buton[i].Parent:=Self;

j:=(Wins[i] mod 15);

k:=(Wins[i] div 15);

if j=0 then

begin

j:=15;

k:=k-1;

end;

Buton[i].Left:=StringGrid1.Left+(j-1)*16;

Buton[i].Top:=StringGrid1.Top+k*16;

Buton[i].Width:=16;

Buton[i].Height:=16;

Buton[i].Font.Name:='Times New Roman';

Buton[i].Font.Size:=8;

Buton[i].Font.Color:=clRed;

Buton[i].Caption:=IntToStr(Wins[i]);

end;

 

-         se semnalizează pentru următoarele extrageri că prima extragere a fost deja tratată:

Prima:=False;

 

-> Se generează evenimentul FormDestroy în care se declară variabila locală i de tip integer. În cazul în care a avut loc cel puţin o extragere, înainte de închiderea aplicaşiei, se trece la eliberarea memoriei ocupată de obiectele create dinamic în timpul extragerii

 

if not Prima then

for i:=0 to 5 do Buton[i].Free;

 

La execuţie se obţine: