Das mit dem ausgelagerten Anzeigen ist eine gute Idee.
Danke.
Hilft allerdings noch nicht gegen das problem, dass non-modale Forms nicht korrekt angezeigt werden.
Und das eigentliche Problem, dass durch die Klassenregistration Speicher geleakt zu werden scheint.
Delphi-Quellcode:
Initialization
Registerclass(TTestform); // hier
Finalization
Unregisterclass(TTestform);
Ich versuchs mal naiv:
Du hast da Deine FormClass.
Wie wäre es, wenn Du die Funktion von diesem Typ machst?
Sowas in der Art:
Delphi-Quellcode:
Function Tplgfrm.Loadform(Parent: Tcomponent; Form:
String; Modal: Boolean) : Tformclass;
Begin
Try
Form := '
T' + Form;
Result := TFormClass(GetClass(Form));
If not Assigned(Result)
Then
Begin
Raise Exception.Create('
The form "' + Form + '
" is not available.');
End
Else
Begin
With TComponentClass(Result).Create(Parent)
As TCustomForm
Do
Try
If Modal
Then
Showmodal
Else
Show;
Finally
// Free;
End;
End;
Except
Raise Exception.Create('
Form could not be loaded.');
End;
End;
Im Programm wäre dann eventuell sowas möglich:
Delphi-Quellcode:
Procedure irgendwas;
Var
FormClass : TFormClass;
begin
FormClass := plgfrm.Loadform(Self,'FromWieAuchImmer', True);
if Assigned(FormClass) then begin
...
FormClass.Close;
FormClass.Free;
end;
end;
Wobei, das Anzeigen des Formulares würd' ich aus der Funktion rausnehmen und im aufrufenden Programm machen, dann kannst Du besser entscheiden, ob das Formular direkt nach dem ShowModal freigegeben wird oder nicht.
Bei 'nem Show kannst Du die Freigabe dann auch beim Beenden des Programmes machen (oder an anderer, sinnvoller Stelle), die variabel FormClass muss dann nur an entsprechender Stelle deklariert werden und nicht innerhalb der Prozedur, die das Formular "anfordert".