Announcement

Collapse
No announcement yet.

Mehrere Instanzen einer Form

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mehrere Instanzen einer Form

    Hallöle, ich möchte ein und diesselbe Form verwenden und je nach Verwendungszweck nur Labels und so weiter anpassen.

    Kann ich irgendwie mehrere Instanzen eines Formulars starten und getrennt verwalten, oder muß ich die Form kompilieren und per Parameterübergabe mehrmals das Programm verändert starten? So habe ich das nämlich bisher gemacht.

    Danke euch!

  • #2
    Hallo Markus, es gibt für Deine Frage sicherlich mehrere Lösungsansätze. Ich als Freizeit-Delphianer verwende folgende beiden:
    <br>
    1. parametrisierter Creator, z.B.
    <br>constructor Create(AOwner: TComponent; fParam1: string); reintroduce; overload;
    <br>Sollten Dir die beiden Direktiven nichts sagen, schau mal in der Online-Hilfe nach. Über Deine zusätzlichen Aufrufparameter (die ich mal mit fParam1=string nur angedeutet habe), kannst Du alle variablen Teile Deines Formulars dem Anwendungszweck gemäß im Constructor ändern, z.B.
    <br>constructor TForm1.Create(AOwner: TComponent; fParam1: string);
    <br>begin
    <br> inherited Create(AOwner); // erzeugt die Grundinstanz TForm
    <br> self.Caption:=fParam2; // würde nun das Formular mit fParam2 betiteln
    <br>end;
    <br> Du kannst im Constructor auch Unter-Klassen erzeugen, die Du dann aber in einem Destructor wieder wegputzen mußt. Schau Dir auch mal die Möglichkeit prozeduraler Parameter an. Hier unterscheidest Du dann Procs, welche die konkrete oder nur die Vorfahr-Klasse (im Bsp. TForm) kennen.

    <br>
    2. Frames: Hier erstellst Du quasi eine Schablone, die Du für jeden konkreten Anwendungsfall umgestalten kannst.

    <br>
    Die erste Variante würde ich nehmen, wenn sich die Änderungen in Grenzen halten und nicht allzuviele unterschiedliche Instanzen abgeleitet werden sollen. Die zweite Variante nehme ich persönlich, um bspw. identische Eingabemasken mit identischer, aufwendiger Verarbeitungslogik oftmals einzusetzen.

    <br>
    Während man Frames in der IDE auf ein konkretes (auch leeres) Form plazieren kann, erzeuge ich abgeleitete Fenster grundsätzlich nach folgendem Schema:

    <br>
    procedure TMainForm.Button1Click(Sender: TObject);
    <br>var Form1: TForm1;
    <br>begin
    <br> Form1:= TForm1.Create(self, 'Mein 1. neues Fenster');
    <br> try
    <br> Form1.ShowModal
    <br> finally
    <br> FreeAndNil(Form1)
    <br> end;
    <br>end;

    <br>
    procedure TMainForm.Button2Click(Sender: TObject);
    <br>var Form1: TForm1;
    <br>begin
    <br> Form1:= TForm1.Create(self, 'Mein 2. neues Fenster');
    <br> try
    <br> Form1.ShowModal
    <br> finally
    <br> FreeAndNil(Form1)
    <br> end;
    <br>end;

    <br> Ich hoffe, es hilft. Sicher gibt es aber noch professionellere Lösungsansätze. Jürge

    Comment


    • #3
      1. du musst die Form selbst mit Create erzeugen.<br>
      2. die globale Variable in der unit am besten loeschen. Gleiches mit dem CreateForm-Aufruf im .dpr<br>
      3. Jetzt eine Reihe von Variablen fuer die Forms anlegen. Ein array ist wohl das beste.<br>
      4. in der unit der Form mit einer Methode versehen, die das Layout wie gewuenscht verstellt.<br>
      5. die Forms mit Create erzeugen. Visible sollte auf False stehen.<br>
      6. Jetzt erst die Layout-Methode aufrufen und erst dann die Form mit Show anzeigen

      Comment


      • #4
        Danke euch, allerdings ist der Inhalt bei jedem Mal extrem unterschiedlich, hab auch schon überlegt, ob ich das ganze in DLLs verpacke, da ich das Prog so auch einfach updaten könnte, was haltet ihr davon, ich hab damit bis jetzt noch nicht gearbeitet

        Comment


        • #5
          HI!<br>
          Wir arbeiten statt mit DLLs mit den Delphi Packages. Updates sind jetzt die reine Freude. Einfach die Packages austauschen und fertig. Geht mit DLLs natürlich genauso.<br>
          BYE BERN

          Comment


          • #6
            Hab ich ehrlich gesagt noch nie was von gehört. Wie funktioniert das so, mein Programm an dem ich gerade arbeite sollte Updates ausführen können und wenn das mit Packages leichter geht, wär ich begeistert

            Comment

            Working...
            X