Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: FormCreate für alle Forms beim Start aufrufen

  Alt 11. Mai 2005, 09:25
Ich implementiere immer eine Methode TForm.Setup, die das Formular initialisiert, die edits leert, Variablen zurücksetzt und das Formular in einen definierten Anfangszustand versetzt (ActiveControl etc.). Dann rufe ich das Formular nicht einfach über ShowModal auf, sondern schreibe mir eine kleine Routine, die das macht. Das ist auf den ersten Blick etwas umständlich, aber ich finde, Anweisungen sollten da stehen, wo sie hingehören.
Delphi-Quellcode:
Function EditKunden (aKunde : TKunde) : TModalResult;
...
Implementation
...
Function EditKunden (aKunde : TKunde) : TModalResult;
Begin
  If Not Assigned (fmEditKunde) Then Application.CreateForm (TfmKunde, fmKunde);
  With fmKunde Do Begin
    Setup (aKunde);
    // hier passiert vielleicht noch mehr...
     Result := ShowModal;
     End;
End;
Wieso muss der Aufrufer wissen, das man das Formular mit Setup initialisieren muss? Eben deshalb schreibe ich diese 'EditXXXX' Funktionen. Allerdings mache ich es i.A. nicht über Application.CreateForm. Ich hatte neulich mal eine Ausnahme: Das Formular zum Bearbeiten eines Auftrags enthielt ettliche Grids, Edits, Lookuplisten etc. Das Erzeugen (mit Create) und das Initialisieren dauert 500-900ms: zu lang für ein Callcenter. Also wurde dieses eine Formular wie oben beschrieben, erzeugt.

Meine Edits sehen so aus:
Delphi-Quellcode:
Function EditKunden (aKunde : TKunde) : TModalResult;
...
Implementation
...
Function EditKunden (aKunde : TKunde) : TModalResult;
Begin
  With TfmEditKunde.Create (Nil) Do Begin
    Setup (aKunde);
    // hier passiert vielleicht noch mehr...
     Result := ShowModal;
     Release; // Kein Free, weil nur Release garantiert, das vorher die message queue geleert wird.
     End;
End;
Damit ist das Formular immer in einem wohldefinierten Zustand, ich verbrate keine Resourcen, falls auf dem Formular TDBEdits sind, geht meine Performance nicht in die Knie, usw. Das Wichtigste ist aber (frei nach Sepp Herberger):
Zitat:
Nach dem Aufruf ist vor dem Aufruf
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat