Sobald von einer Form mehrere Instanzen benötigt werden, hat man eh ein Problem, denn die globale kann ja nur eine Referenz speichern.....
Das Problem mit mehreren Instanzen "des selben Formulars" habe ich ja Gott sei Dank nicht. Die
MDI's erben von einem gemeinsamen Vorfahren alle grundlegenden Eigenschaften und die anderen "normalen" Formulare sind eindeutig, d.h. es wird immer nur eine einzige Instanz benötigt.
Der Bahnhof ist für mich jedoch noch nicht kleiner geworden. Wenn ich - respektive der User - einen Button zum Schließen hat, dann ist die Sache schon klar. Aber, ich hab doch ausgenommen von modalen Fenstern i.d.R. keinen Close-Button. Darum die Frage, wenn ich denn schon Release verwenden soll, wo? Und wo setzt man die Form-Variable auf nil? Muss ja gemacht werden, sonst müsste ich ja die bisherige Boolean-Variable weiter verwenden.
So langsam kommt mir der Verdacht, dass die aus der Not geborene Variante (ich wusste bzw. weiß es ja nicht besser, und sogar die Experten sind sich nicht offensichtlich ganz so einig wie man es besser oder idealerweise macht) mit der Hilfsvariablen gar nicht so schlecht ist.
Darum nochmals die Frage: Ist das jetzt der Königsweg? Oder was funktioniert in dieser Variante nicht so wie gewollt? Speicherleck scheint es ja keines zu geben, denn mit FastMM und aktiviertem "ReportMemoryLeaksOnShutdown := True" kommt jedenfalls keine Meldung.
Delphi-Quellcode:
{-Interface-procedure zum Anzeigen der Form-}
procedure FrmClient1_Show;
begin
if not Assigned(FrmClient1)
then FrmClient1 := TFrmClient1.Create(Application);
FrmClient1.Show;
end;
procedure TFrmClient1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
FrmClient1 := nil;
end;
procedure TFrmClient1.FormCreate(Sender: TObject);
begin // EDIT: Sorry, das braucht man ja nicht mehr
FrmClient1Active := true;
end;