procedure TMain.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (Acol=0) and (arow=0) then
with (Sender as TDrawgrid) do
with canvas do
Draw(Rect.Left,Rect.top,image1.Picture.Graphic);
Meni treba ovo zato sto ponovo pravim igru "snake", ali na drugi nacim.
Ranije sam je pravio iscrtavanjem niza slika, a sad hocu da uradim istu stvar uz pomoc StringGrida/DrawGrida zbog manjeg koda i lakseg pravljenja nivoa.
Dakle ista slika ce trebati da se postavlja na vise mesta, a da se brise sa drugih...
E, sad, kad bi sve slike ucitao na pocetku, to i ne bi bilo bas prakticno.
Ili se varam ?
Na pamet mi je prvo pala ideja da menjam vrednosti za ACol i ARow, ali mi nije uspelo.
Pazi, kada se iscrtava grid, ta funkcija se poziva za svaku celiju zasebno znaci onoliko puta koliko imas kolona * redova. Ako bi uklonio proveru za row i acol i samo iscrtao sliku, ta slika bi bila u svim celijama.
U cells[arow, acol] drzi indekse slika koje treba da se iscrtaju i onda ih iscrtavas sa:
Zasto komplikujes sa gridovima!?
Dovoljna ti je jedna matrica 50x50 (ili koliko vec hoces) u kojoj ces cuvati sta se nalazi u kom polju i posla samo na osnovu tih vrednosti iscrtas sliku na TBitmap.Canvas. To ce ti biti backbuffer i kad god je potrebno samo ga "pljunes" na formu ili neku komponentu (TImage, TPanel, TButton...) gde zelis da se vidi ta slika. Pogledaj moj primer http://www.elitesecurity.org/poruka/547708 ili http://www.elitesecurity.org/poruka/540770