Stworzyłem sobie klase w ktorej mam dynamiczną forme, 3 labele i jednego buttona. Potrzebuje otworzyć nieograniczoną liczbe tych form tak wiec wpakowałem to do tablicy dynamicznej. Jednym buttonem powiekszam tablice i tworze forme, drugim ją usuwam i zmniejszam tablice (zaczynając zawsze od ostatniej). Jest tylko jeden problem, podczas calej tej operacji mam w tle odpalone menedzer zadan i widze ze podczas nowej formy zwiększa się zużycie RAMu ale podczas ich zamykania nie jest ani troche zwalniane. Zrobilem wszystko czego sie nauczyłem z książek i dynamicznych komponentach i nie wiem dlaczego tak sie dzieje. "Normalne" formy delphi znikają w pamięci prawidłowo. Mógłby ktos zerknąć na kod? Jest bardzo prosty.
type
TFormy = class
public
forma: TForm;
labTime: TLabel;
labDate: TLabel;
labTytul: TLabel;
buttOK: TBitBtn;
constructor Utworz(Godzina, Data, Tytul: String);
destructor Usun;
end;
var
Formy: Array of TFormy;
//CONSTRUCTOR
constructor TFormy.Utworz(Godzina, Data, Tytul: String);
begin
forma := TForm.Create(nil);
labTime := TLabel.Create(forma);
labDate := TLabel.Create(forma);
labTytul := TLabel.Create(forma);
buttOK := TBitBtn.Create(forma);
//button
with buttOK do begin
Parent := forma;
Left := 1;
Top := 50;
Caption := 'OK';
Show;
end;
//label 1
with labTime do begin
Parent := forma;
Left := 1;
Top := 1;
Caption := Godzina;
Show;
end;
//label 2
with labDate do begin
Parent := forma;
Left := 1;
Top := 10;
Caption := Data;
Show;
end;
//label 3
with labTytul do begin
Parent := forma;
Left := 1;
Top := 20;
Caption := Tytul;
Show;
end;
//pokaz forme
forma.Show;
end;
//DESTRUCTOR
destructor TFormy.Usun;
var
i: integer;
begin
FreeAndNil(labTime);
FreeAndNil(labDate);
FreeAndNil(labTytul);
FreeAndNil(buttOK);
FreeAndNil(forma);
end;
//BUTTON UTWORZ FORME
procedure TfrmMain.ToolButton5Click(Sender: TObject);
begin
SetLength(Formy, Length(Formy)+1);
Formy[High(Formy)] := TFormy.Utworz('01:12', '345345', 'Jakis tytul');
end;
//BUTTON USUN FORME
procedure TfrmMain.ToolButton6Click(Sender: TObject);
begin
Formy[High(Formy)].Usun;
Formy[High(Formy)] := nil;
SetLength(Formy, Length(Formy)-1);
end;