Keine Ahnung, ob das relevant ist, aber der Ansatz hat den Nachteil, dass immer nur eine Instanz einer Form-Klasse existieren kann.
Ich sehe auch jetzt keinen wirklichen Vorteil in einem speziellen Form-Manager gegenüber der Nutzung von Screen.Forms[]. Jede TCustomForm/TForm-Instanz registriert sich in Screen.Forms/CustomForms in der InitializeNewForm Methode und entfernt sich im Destroy wieder. Eine simple Iteration findet ein Form nach jedem halbwegs sinnvollem Kriterium (Name, Klasse, ...). Will man es komfortabler, schreibt man einen Wrapper (z.B. class helper for TScreen). Der Regsutrierungs-Mechanismus ist vorhanden und erfordert keinen zusätzlichen Code. Warum sollte man das nicht nutzen?
Delphi-Quellcode:
type
TScreenHelper = class helper for TScreen
public
function FindOrCreate<T:TForm>(const AName: string = ''): T;
end;
function TScreenHelper.FindOrCreate<T>(const AName: string): T;
var
frm: TForm;
I: Integer;
begin
for I := 0 to FormCount - 1 do begin
frm := Forms[I];
if (frm.ClassType = T) and ((AName = '') or SameText(AName, frm.Name)) then
Exit(T(frm));
end;
Result := T.Create(nil);
if AName > '' then begin
Result.Name := AName;
end;
end;
...
begin
myForm := Screen.FindOrCreate<TMyForm>;
myForm2 := Screen.FindOrCreate<TMyForm>('myForm2');
end;