Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.034 Beiträge
 
Delphi 12 Athens
 
#20

AW: Verwaltung aller Forms eines Programms

  Alt 6. Jan 2021, 14:46
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat