Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Forms zur Laufzeit (https://www.delphipraxis.net/16883-forms-zur-laufzeit.html)

Hansa 24. Feb 2004 23:49


Forms zur Laufzeit
 
Hi,

ich soll zur Laufzeit einen Haufen Forms erzeugen. Jetzt fällt mir auf, daß ich dann jeden Button auch neu erzeugen muß. Kann ich nicht eine Form erzeugen und bestücken und sie trotzdem erst zur Laufzeit erzeugen ?

Robert_G 25. Feb 2004 00:20

Re: Forms zur Laufzeit
 
Wenn du eine Form im Designer erzeugst und nicht in die AutoCreate-Liste nimmst (das meintest du doch oder?) wird sie doch bei...

TFormIrgendWas.Create(Self);

... mit allem Drumrum erzeugt oder ist es gerade zu spät für mein gemartertes Hirn? :freak:

Bit Juggler 25. Feb 2004 00:23

Re: Forms zur Laufzeit
 
Hi,
wenn ich Dich nicht falsch verstanden habe dann meinst Du wohl das:

Delphi-Quellcode:
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
  Form1:= TForm1.Create(Self);
  try
    Form1.ShowModal //ShowModal weil sich die Form sonst sofort wieder schließt
  finally
    FreeAndNil(Form1)
  end
end;
Vorher musst Du aber noch unter Projekt -> Optionen -> Formulare die Formulade die Du wie oben beschrieben erzeugen willst von der Sparte "Automatisch erzeugen" zur Sparte "Verfügbare Formulare" verschieben!

Gruß Bit

grayfox 25. Feb 2004 00:34

Re: Forms zur Laufzeit
 
hallo bit!

Zitat:

ShowModal weil sich die Form sonst sofort wieder schließt
es funktioniert trotzdem mit form.show, sofern du formstyle auf fsStayOnTop setzt

mfg, stefan

bundy 25. Feb 2004 00:35

Re: Forms zur Laufzeit
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
uses unit2; {form2}


procedure TForm1.Button1Click(Sender: TObject);
begin
with TForm2.Create(self) do
begin
Show;
end;
end;


funtioniert so :thuimb:
Kannst nun soviele Forms aufrufen (erzeugen) wie du willst.

Hansa 25. Feb 2004 19:11

Re: Forms zur Laufzeit
 
Habe jetzt alle im Moment vorhandenen Forms dynamisch erzeugt. Allerdings habe ich sie nicht verschoben oder sonst etwas an den Optionen geändert, sondern sie in der DPR einfach gelöscht.

Das funktioniert insofern auch. Aber wie lange ? Wenn ich eine Form mit
Delphi-Quellcode:
MyForm.create (self);
erzeuge und sie dann schließe, was ist dann damit ? Klicke ich auf einen Button und habe diesen Code im OnClick-Ereignis drin stehen, so wird die Form neu erzeugt. Jetzt schließe ich die Form und klicke wieder auf den Button, dann lande ich ja wieder bei dem Code. Ist Delphi so schlau, das Formular selber freizugeben, wenn es geschlossen wird ?

Laut OH soll man am besten try...finally benutzen, sofern in dem Formular eine Exception ausgelöst wird. Schön und gut, aber was wenn nicht ? Also: wodurch und wann wird der reservierte Speicher aus dem create wieder freigegeben ?

Robert_G 25. Feb 2004 19:40

Re: Forms zur Laufzeit
 
In den meisten meiner Anwendungen nutze ich MDI. Da werden ständig Formulare erzeugt und freigegeben.
Da ich eigentlich auch User dieser Programme bin, kann ich dir als Erfahrungbericht sagen:
Hast du im OnClose-Event "Action:= caFree;" dann ist das Ding weg.
Eine App habe ich den ganzen Tag nebenher offen und da werden täglich hunderte von Forms erzeugt und freigegeben. Die Speichernutzung steigt aber nicht mit der Zeit
-> Ich denke also, dass da auch alles mit weggeputzt wird!

Hansa 25. Feb 2004 20:25

Re: Forms zur Laufzeit
 
Das OnClose ist im Moment aber noch leer. Mir kommt es so vor, daß die Forms automatisch freigegeben werden. Wie ermittele ich für solch einen Fall eigentlich den Speicher ? 8) Kleiner Test würde ja schon genügen. :gruebel:

Sanchez 25. Feb 2004 20:41

Re: Forms zur Laufzeit
 
Wenn OnClose leer ist, werden sie beim Schließen nicht freigegeben.
Wenn der Owner freigegeben wird gibt der auch das Form mit frei. Vermutlich ist der Owner das Hauptformular.
Insofern du nicht
Delphi-Quellcode:
  TEinForm.Create(nil);
sagst musst du dich auch nicht selbst um die Freigabe kümmern.

grüße, daniel

Hansa 25. Feb 2004 20:55

Re: Forms zur Laufzeit
 
So ungefähr sieht das jetzt aus:

[/delphi]
var
MyForm: TMyForm;

implementation

procedure TMyForm.lblAusgClick(Sender: TObject);
begin
inherited;
MyForm:= TMyForm.Create(self);
MyForm.Show;
end;[delphi]


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz