Forms automatisiert freigeben

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Forms automatisiert freigeben

Beitrag von Ralph59 »

Hallo,

ich habe da schon wieder einmal ein kleines Problem.

Ich wollte in einer Anwendung ein Form automatisch generieren und dann wieder freigeben.
Das Form wird aus einer Datenbank mit unterschiedlichem informationen gespeist. Ich weiß also im vonherein nicht was alles generiert wird, außer, das in dem Form mehrere Groupboxen und mehrere checkboxen in den einzelnen Groupboxen automatisch erstellt werden.

Das erstellen funktioniert recht einfach mit (nur ein Beispiel, noch nicht aus einer Datenbank)

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
var
  f:TForm;
  fCheckBox:TCheckbox;
  fGroupBox: TGroupBox;
  c:string;
begin
  f:=TForm.Create(self);
  f.SetBounds(0,0,450,450);
  f.Caption:='Dies ist ein Test';
  fGroupBox:=TGroupBox.Create(self);
  with fGroupBox do begin
    Name := 'kopieren';
    caption := 'kopieren';
    SetBounds(10, 10, 200, 200);
    parent := f;
  end;
   fCheckBox := TCheckbox.Create(Self);
    with fCheckBox do
    begin
      Name    := 'Name12';
      Caption := 'Hallo 1';
      SetBounds( 10, 20, 10, 5);
      visible:=true;
      fCheckBox.Parent := fGroupBox;
    end;
  fGroupBox:=TGroupBox.Create(self);
  with fGroupBox do begin
    Name := 'spiegeln';
    caption := 'spiegeln';
    SetBounds(210, 10, 200, 200);
    parent := f;
  end;
   fCheckBox := TCheckbox.Create(Self);
    with fCheckBox do
    begin
      Name    := 'Name1';
      Caption := 'Hallo 1';
      SetBounds( 10, 20, 10, 5);
      visible:=true;
      fCheckBox.Parent := fGroupBox;
    end;
   f.ShowModal;
   showmessage(inttostr(f.ControlCount));
end;
Wenn ich das Fenster jedoch schließe sind natürlich die Form, die Groupboxen und auch die Checkboxen noch vorhanden.

Wenn ich versuche mt f.destroy oder f.free nur das Fenster zu beenden, dann meckert er immer noch rum, dass bestimmte Elemente noch vorhanden sind.
Ein for I := 0 to f.count-1 scheint auch nicht zu funktionieren, da ich hier bei bei 4 Elementen auf dem Fenster nur eine 2 zurück gegeben bekomme.

Auch wenn ich z.B.

Code: Alles auswählen

showmessage(inttostr(f.kopieren.ControlCount));
aufrufe, bekomme ich einen Fehler, identifer idents no member "kopieren"


Muss ich mir jedes Element merken, oder gibt es eine einfache Möglichkeit alle Elemente und das Fenster frei zu geben, damit ich dieses neu erstellen kann.

Ich habe da schon alss Alternative an ein zusätzliches thread gedacht.

Über Ideen würde ich mich sehr freuen.

Mit freundlichem Gruß

Ralph
Dateianhänge
Das Fenster sieht im Test ungefähr so aus.
Das Fenster sieht im Test ungefähr so aus.
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Benutzeravatar
theo
Beiträge: 10874
Registriert: Mo 11. Sep 2006, 19:01

Re: Forms automatisiert freigeben

Beitrag von theo »

Dafür ist doch der Owner da.

Statt:
fGroupBox:=TGroupBox.Create(self);
machst du
fGroupBox:=TGroupBox.Create(f);

Dann wird fGroupBox mit "f" ge-freed.

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: Forms automatisiert freigeben

Beitrag von Ralph59 »

Danke Theo,

manchmal steht man schon schwer auf dem Schlauch,

hätte ich eigendlich auch selber drauf kommen können. Bin halt doch noch ein Anfänger.

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Antworten