Stworzyłem Tablice dynamiczna w taki sposób [nie do konca dobry]
Wiec
var i: byte;
begin
for i:=0 to 3 do { tu zamiast 3 miło bym widział cos innego bardziej zmiennego zalezne od innej procedurki}
begin
SetLength(gracz1,length(gracz1)+1);
gracz1[High(gracz1)]:=Timage.Create(self);
gracz1[i].Parent:=self;
gracz1[i].Picture.LoadFromFile('c:\obraz.jpg');
gracz1[i].Visible:=true;
gracz1[i].Stretch:=true;
end;
No a moim problemem jest aby w czasie działania programu dodac obraz lub go usunąć... Każda nawet najmniejsza pomoc mile widziana. Z góry dziękuje...
0
0
for i := PozycjaKasowana to Length(Tablica) - 2 do Tablica[i] := Tablica[i+1];
SetLength(Tablica, Length(Tablica) -1);
0
Jeśli kolejność nie jest ważna, to szybciej jest:
Tablica[PozycjaKasowana]:=Tablica[High(Tablica)];
SetLength(Tablica,Pred(Length(Tablica)));
Nie zapomnij oczywiście o zwolnieniu obiektu przedtem :-)
0
Jeśli kolejność nie jest ważna, to szybciej jest:
Tablica[PozycjaKasowana]:=Tablica[High(Tablica)];
SetLength(Tablica,Pred(Length(Tablica)));
Nie zapomnij oczywiście o zwolnieniu obiektu przedtem :-)
Dzieki, bo kolejnosc nie jest akurat u mnie wazna
To jeszcze dwa pytanka:
- Jak dodac cos do takiej tablicy??
- Co jest lepsze przy zwolnieniu obiektu:
var i: byte;
begin
for i:=0 to 3 do
gracz1[i]:=nil //to czy to ponizej
gracz1[i].Free;
end;
Zwolnienie obiektu zawsze musi byc nie tylko w dynamicznych tablicach...
0
- No jak jak dodać? Przecież dodawałeś w pierwszym poście :
SetLength(gracz1, length(gracz1)+1); //zwiększasz długośc tablicy dynamicznej o 1
gracz1[High(gracz1)]:=Timage.Create(self); //tworzysz w tym miejscu nowy obiekt
//itd itd
- Drugi sposób jest jedynie słuszny.
0
- Co jest lepsze przy zwolnieniu obiektu:
gracz1[i]:=nil
//to czy to ponizej
To NIE zwalnia obiektu, tylko zeruje wskaźnik na obiekt. Obiekt zostaje i co gorsza już go nie zwolnisz (bo nie wiesz gdzie jest - wyzerowałeś wskaźnik)
gracz1[i].Free;
To zwalnia (aczkolwiek nie zeruje wskaźnika)
Czasem dobrze jest mieć wyzerowany (=nil) wskaźnik zwolnionego obiektu - można wtedy sprawdzić istnienie obiektu przez
if gracz[i]=nil
lub if Assigned(gracz[i])
Należy zrobić
```delphi
gracz1[i].Free;
gracz1[i]:=nil;
albo
FreeAndNil(gracz1[i]);
</quote>