Kako u delphiju da napravim mnogo objekata istog tipa kojima mogu da pristupam preko indexa kao sto pristupam clanovima niza ili matrica i da li je to uopste moguce.
Pristupanje jednom od mnogo objekata istog tipa preko indexa?
Zaključano
Zakačeno
Kada napravis objekat, upises njegovu adresu kao pointer u TList.
Ako su u pitanju klase onda pored TList možeš koristiti i TObjectList koji ima neke dodatne mogucnosti koje ti mogu biti interesantne.
Code:
var
List: TObjectList; // TList;
Temp: TStrings;
i: Integer;
begin
List := TObjectList.Create(True); // Pogledaj u helpu razliku izmedju kreiranje sa True i False
for i := 0 to 1000 do
begin
Temp := TStringList.Create;
List.Add(Temp);
end;
List.Free; // Ako koristiš TList onda moraš sam osloboditi objekte
end;
var
List: TObjectList; // TList;
Temp: TStrings;
i: Integer;
begin
List := TObjectList.Create(True); // Pogledaj u helpu razliku izmedju kreiranje sa True i False
for i := 0 to 1000 do
begin
Temp := TStringList.Create;
List.Add(Temp);
end;
List.Free; // Ako koristiš TList onda moraš sam osloboditi objekte
end;
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Hvala vam na odgovorima ali mi trenutno bas ne koriste jer sam danas reinstalirao windows a ne mogu da nadjem instalaciju za delphi. Inace nisam ni razumeo bas kako to da uradim(jer jos nisam radio u delphiju vec samo u paskalu a o delphiju sam samo malo citao-ovo je u stvari prvi problem na koji sam naisao vec u planiranju algoritma za prvi program u delphiju a nisam uspeo da nadjem nista o tome u helpu) ali kad se malo nacitam o delphiju verovatno cu skapirati.
Hvala vam u svakom slucaju, procitacu ovo ponovo kad budem imao dovoljno znanja da isto i shvatim i kad nadjem tu instalaciju.
Hvala vam u svakom slucaju, procitacu ovo ponovo kad budem imao dovoljno znanja da isto i shvatim i kad nadjem tu instalaciju.
> jer sam danas reinstalirao windows a ne mogu da nadjem instalaciju za delphi.
Možeš da skineš i probaš besplatan Turbo Delphi (www.turboexplorer.com), nabavi i neku knjigu i možeš početi sa učenjem.
Možeš da skineš i probaš besplatan Turbo Delphi (www.turboexplorer.com), nabavi i neku knjigu i možeš početi sa učenjem.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Hvala.
Inace, ne znam da li sam bio dovoljno jasan(verovatno nisam).
Ja sam mislio da napravim nesto kao sudoku ili minesweeper gde ima mnogo objekata(dugmad,textbox-ovi,...) koji bi svi trebali da koriste istu proceduru. Npr, ako neko klikne na neko polje u minesweeperu, koristi se procedura za to polje i klik na njega a ako klikne na neko drugo, onda se koristi nova procedura koja se odnosi na ovo polje i klik na njega a identicna je kao i predhodna samo je drugi naziv dugmeta. Gledao sam pre da li postoji neka tabela ili nesto slicno koja bi funkcionisala ovako i tako zamenila to sto mi treba ali nisam nasao.
Inace, ne znam da li sam bio dovoljno jasan(verovatno nisam).
Ja sam mislio da napravim nesto kao sudoku ili minesweeper gde ima mnogo objekata(dugmad,textbox-ovi,...) koji bi svi trebali da koriste istu proceduru. Npr, ako neko klikne na neko polje u minesweeperu, koristi se procedura za to polje i klik na njega a ako klikne na neko drugo, onda se koristi nova procedura koja se odnosi na ovo polje i klik na njega a identicna je kao i predhodna samo je drugi naziv dugmeta. Gledao sam pre da li postoji neka tabela ili nesto slicno koja bi funkcionisala ovako i tako zamenila to sto mi treba ali nisam nasao.
Implementacija semantike u nekoj logickoj igri moze se realizovati na puno raznih nacina, a ja necu o tome ovde nista reci.
Samo cu dati jedan od odgovora na tvoje pitanje, bez ulaska u raspravu da li je tako najbolje.
Recimo, vecina objekata u VCL-u ima Tag osobinu, koja je zapravo obican Integer. Svakom objektu na formi mozes dodeliti neki drugi broj a kasnije u kodu napraviti zajednicki (jedan!) OnClick dogadjaj, koji moze imati sledecu strukturu>\:
Samo cu dati jedan od odgovora na tvoje pitanje, bez ulaska u raspravu da li je tako najbolje.
Recimo, vecina objekata u VCL-u ima Tag osobinu, koja je zapravo obican Integer. Svakom objektu na formi mozes dodeliti neki drugi broj a kasnije u kodu napraviti zajednicki (jedan!) OnClick dogadjaj, koji moze imati sledecu strukturu>\:
Code:
// PSEUDO, proveri sintaksu, Pascal mi je izvetrio...
OnClick( Sender: TObject )
{
case Sender.Tag of
0: nesto := '1';
1: nesto := '2';
2: nesto := '3;
end;
}
// PSEUDO, proveri sintaksu, Pascal mi je izvetrio...
OnClick( Sender: TObject )
{
case Sender.Tag of
0: nesto := '1';
1: nesto := '2';
2: nesto := '3;
end;
}
Aha, kapiram sta ti treba. Pa mozes da radis i sa obicnim array-om, evo ovako nesto:
A u nekom OnClick handler-u, mozes glatko da proveris koji je button u pitanju prostim uslovom:
Mada, ovde cim izadjes iz procedure gubis pointere na kreirane TButton-e, odnosno varijablu Tabela moras deklarisati negde izvan procedure, kao globalnu, ili kao private field od forme (TForm) na kojoj sve ovo radis.
Znas sta, iz tvojih prethodnih postova vidim da ni pola ovoga neces razumeti :) . Nema veze, zapni sa ucenjem, a odgovor na pitanje "da li moze da se pristupa objektima preko indeksa" glasi MOZE. Kako budes napredovao, tako ce ti i gornji kod biti sve jasniji...
Rajko
Code:
type
TButtonTabela: array[1..10, 1..10] of TButton;
var
Tabela: TButtonTabela;
i, j: Integer;
begin
for i := 1 to 10 do begin
for j := 1 to 10 do begin
Tabela[i, j] := TButton.Create(nil);
Tabela[i, j].Parent := self; // ili neka druga kontrola, recimo neki Panel
// Tabela[i, j].SetBounds(....) // ovde dodje neki kod za pozicioniranje dugmeta
end;
end;
end;
type
TButtonTabela: array[1..10, 1..10] of TButton;
var
Tabela: TButtonTabela;
i, j: Integer;
begin
for i := 1 to 10 do begin
for j := 1 to 10 do begin
Tabela[i, j] := TButton.Create(nil);
Tabela[i, j].Parent := self; // ili neka druga kontrola, recimo neki Panel
// Tabela[i, j].SetBounds(....) // ovde dodje neki kod za pozicioniranje dugmeta
end;
end;
end;
A u nekom OnClick handler-u, mozes glatko da proveris koji je button u pitanju prostim uslovom:
Code:
procedure TForm1.Button1Click(Sender: TObject);
if Sender = Tabela[i, j] then ... // ovako proveravas koji je (ili nije) button u pitanju
// ...
end;
procedure TForm1.Button1Click(Sender: TObject);
if Sender = Tabela[i, j] then ... // ovako proveravas koji je (ili nije) button u pitanju
// ...
end;
Mada, ovde cim izadjes iz procedure gubis pointere na kreirane TButton-e, odnosno varijablu Tabela moras deklarisati negde izvan procedure, kao globalnu, ili kao private field od forme (TForm) na kojoj sve ovo radis.
Znas sta, iz tvojih prethodnih postova vidim da ni pola ovoga neces razumeti :) . Nema veze, zapni sa ucenjem, a odgovor na pitanje "da li moze da se pristupa objektima preko indeksa" glasi MOZE. Kako budes napredovao, tako ce ti i gornji kod biti sve jasniji...
Rajko
Zapravo 2 predhodna posta su mi veoma jasna, jos samo da probam i u praksi. Hvala vam.