Witam!
Mam dziwny problem ze zwalnianiem dynamicznie tworzonych komponentów klasy TQRLabel. Tablica komponentów jest zadeklarowana globalnie w unicie. Potem w OnClick przycisku mam coś takiego:
//czyszczenie tablicy
for i:=0 to high(lab) do
lab[i].Free;
//tworzenie nowych komponentów
doda:=0;
for i:=0 to j-1 do
begin
lab[doda]:=TQRLabel.Create(self);
lab[doda].Parent:=QRBand1;
lab[doda].AutoSize:=false;
lab[doda].Left:=39;
lab[doda].Width:=26;
lab[doda].Top:=136+21*i;
lab[doda].Font.Size:=12;
lab[doda].Alignment:=taCenter;
lab[doda].Caption:=IntToStr(i+1);
lab[doda].Transparent:=true;
doda:=doda+1;
end;
zmienna "doda" jest deklarowana w procedurze OnClick.
oczywiscie ilość tworzonych komponentów zależy od zmiennej "j", która się zmienia. Problem jest następujący, gdy proceudre wykonam 3-4 razy, to wywala mi Access Violation:/ Nie ma takiego problemu jak j za każdym razem jest takie samo...
W jaki sposób poprawnie zwalniac komponenty zeby nie było takich problemów? Aha, uzywam Delphi6 Enterprise
EDIT:
Teraz na szybko zrobiłem nowy projekt:
var
Form1: TForm1;
test:Array[0..200] of TQRLabel;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to high(test) do
test[i].Free;
j:=StrToIntDef(Edit1.Text,2);
for i:=0 to j do
begin
test[i]:=TQRLabel.Create(self);
end;
end;
Kombinacja j=4, 7, 4, 7, 4, 7 wywala sie bodajże za 3 razem...