![]() |
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 ? |
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: |
Re: Forms zur Laufzeit
Hi,
wenn ich Dich nicht falsch verstanden habe dann meinst Du wohl das:
Delphi-Quellcode:
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!
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; Gruß Bit |
Re: Forms zur Laufzeit
hallo bit!
Zitat:
mfg, stefan |
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. |
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:
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 ?
MyForm.create (self);
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 ? |
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! |
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:
|
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:
sagst musst du dich auch nicht selbst um die Freigabe kümmern.
TEinForm.Create(nil);
grüße, daniel |
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 21:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz