Tablice dynamiczne

0

Chciałbym w czasie działania programu utworzyć jakąś liczbę Buttonów. Mam taki kod:
var
data:array of tbutton;
procedure TForm1.Button1Click(Sender: TObject);
begin
Setlength(data,length(data)+1);
data[length(data)]:=tbutton.Create(self);
end;

pierwszy button tworzy się dobrze ale potem wyskakuje seria błędów

za pomoc dziękuje z góry

boris
DELPHI 5

0

Nie wiem, czemu pierwszy sie tworzy dobrze...

powinno byc data[High(data)]:=TButton.Create(Self);

dlaczego?
bo indeksy tablic dynamicznych licza sie od 0

Innymi slowy:

jesli na poczatku tablica ma dlugosc n.p. 3 to ma indeksy od 0 do 2

po zwiekszeniu dlugosci ma dlugosc 4 a indeksy 0 do 3

no i data[length(data)]:=tbutton.Create(self); probuje utworzyc button w tablicy dane o indeksie 4, ktory nie istnieje. Jasne?
--Pawel {Delphi6 }

Po pierwsze: naciśnij F1

0

Dzięki, teraz działa
tylko że ten kod mam z ksiązki, tyle że tam zamiast tbutton był integer i wszystko działało dobrze hmm...

0

Tak w ogole to ze wzgledu na specyfike zarzadzania pamiecia w Delphi nie zaleca sie powiekszania tablic wielokrotnie w malych przyrostach. Lepiej z gory obliczyc ile bedzie trzeba i zrobic jedno SetLength. Ale wiem, ze czasem sie nie uda.

No a w kodzie w ksiazce musial byc blad albo musial sie troszke roznic. Zawsze odwolanie tablica[Length(tablica)] jest dla tablic dynamiznych błędne.--Pawel {Delphi6 }

Po pierwsze: naciśnij F1

0

Zamiast tablicy można było użyć pętli
np
procedure pętla
var
X:Integer;
begin
For x:=0 to 20 do *zamiast 20 moze być dowolna ilość buttonów
begin
*procedura tworząca button
end
end;--

1 użytkowników online, w tym zalogowanych: 0, gości: 1