Meine Testreihe ist beendet, mit folgendem Ergebnis :
close alleine gibt den Speicher nicht automatisch frei. Ebensowenig wie das :
Action := caFree;
im OnClose. Zusätzlich verzögert sich die Laufzeit schon bemerkbar. Setze ich ein free oder Destroy hinter das Create, so wurden bisher 1,1 Mio Forms erzeugt und wieder freigegeben. Die Laufzeit für jede erzeugte Form war gleich. Das ist nun Schade, denn das nützt mir nichts.
Ich deklariere die Forms nämlich so :
TMeineForm = class (TForm)
..
TDeineForm = class (TMeineForm)
..
usw.
dementsprechend erzeuge ich sie so :
Delphi-Quellcode:
procedure TMeineForm.lblDeineFormClick(Sender: TObject);
begin
inherited;
DeineForm:= TDeineForm.Create(self);
DeineForm.Show;
end;
Hintergrund ist der, daß ich viele Eigenschaften schon in TMeineForm deklariere. Die Schriftart, einige Steuerelemente, einige Eigenschaften. Diese Form lege ich in das Repository/Objektablage und sage nicht neu -> Form, sonder neu -> weitere -> Inherited. Somit ist alles schon überall richtig und gleich eingestellt. Nun habe ich gestern ein Panel vergessen, das auf jede Form noch drauf mußte. Anstatt die ganzen Forms einzeln umzubauen, habe ich das auf MeineForm gelegt und dank
OOP war es auf allen anderen Forms drauf.
Wenn ich nun aber die Forms dynamisch erzeuge, so bräuchte ich analog eine zentrale Stelle, um sie wieder zu entfernen. Leider geht das mit caFree im OnClose eben nicht.
Ich sehe gerade, daß ich weder Constructor noch destructor habe.