Problem ze zwalnianiem komponentów

0

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...

0

a co delphi ma ci niby zwolnić tu for i:=0 to high(test) do test[i].Free; ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

0

Tu masz przykład (z tablicą dynamiczną), który powinien działać dobrze:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    fLabels: array of TLabel;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i, count: Integer;
begin
  count:= Random(10) + 1; //przypadkowa ilosc komponentow

  for i:=0 to Length(fLabels) - 1 do
    fLabels[i].Free; //zwalnianie poprzednich

  SetLength(fLabels, count); //zmiana wielkosci tablicy

  for i:=0 to count - 1 do //tworzenie nowych
  begin
    fLabels[i]:= TLabel.Create(Self);
    fLabels[i].Parent:= Self;
    fLabels[i].Top:= 10 + 15 * i;
    fLabels[i].Left:= 10;
    fLabels[i].Caption:= IntToStr(i);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
  SetLength(fLabels, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
  for i:=0 to Length(fLabels) - 1 do
    fLabels[i].Free; //zwalnianie

  SetLength(fLabels, 0);
end;

end.
0

ech, ok, my bad.. faktycznie. Ale co dziwne, wcześniej próbowałem zamiast high(test) dać poprzednią ilość i też mi wywalało Access... ale to od czego innego, dzięki Misiekd

PS. Rozjechałeś forum

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