Announcement

Collapse
No announcement yet.

Constructor eines Forms erweitern

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

  • Constructor eines Forms erweitern

    Hallo,

    Wie kann den Create-Constructor eines Formulars mit zusätzlichen Parametern erweitern (z.B. einem String)? Der Aufruf müsste dann so aussehen:

    MyForm := TMyForm.Create(Self, 'Irgend ein String');

  • #2
    <p>Hallo Stefan,<br>
    <br>
    <b>constructor</b> Create(aOwner:TComponente; aText:<b>String</b>); <b>reintroduce</b>.<br>
    <br>
    Gruß Thomas</p&gt

    Comment


    • #3
      <p>Hallo Stefan,<br>
      <br>
      <b>constructor</b> Create(aOwner:TComponent; aText:<b>String</b>); <b>reintroduce</b>.<br>
      <br>
      Gruß Thomas</p&gt

      Comment


      • #4
        <p>Hallo Stefan,<br>
        <br>
        <b>constructor</b> Create(aOwner:TComponent; aText:<b>String</b>); <b>reintroduce</b>;<br>
        <br>
        Gruß Thomas</p&gt

        Comment


        • #5
          Hallo Thomas

          Besten Dank für Deine prompte Antwort

          Comment


          • #6
            Hallo Thomas,<p>das was ich jetzt schreibe ist eine Vermutung!<p>Ich glaube durch das reintroduce ohen override unterbrichst Du die " virtual chain". Problem: reintroduce und override lassen sich auf eine virtuelle Methode nicht anwenden, da virtuelle Methoden in íhrer Deklarartion nicht geändert werden können.<p>Deshalb schlage ich vor einfach einen zusätzlichen constructor einzuführen. Z.B. so:<p>

            <pre>

            constructor Create(aOwner:TComponent); override; // falls der alte gebraucht wird
            constructor MyCreate(aOwner:TComponent; aText:String); virtual;

            constructor TForm1.MyCreate(aOwner:TComponent; aText:String);
            begin
            inherited Create(aOwner);
            ...
            end;

            </pre><p>
            :-) Jens Schuman

            Comment


            • #7
              Hi Jens

              Tatsächlich ist Deine vorgeschlagene Lösung die beste, nicht weil man es so machen muß, da man sehrwohl "virtuelle" Methoden überladen kann, also neue Parameter einsetzen kann. Man unterbricht aber die "virtuelle" Aufruffolge der vererbten Constructoren, was aber nicht sinnvoll ist.

              Borland selber führt in TForm den neuen constructor CreateNew() ein, nur um die "Virtualität" der Constructoren nicht zu zerstören, und damit die Möglichkeit der "Polymorphie" von TForm's NICHT zu unterbinden.

              Gruß Hage

              Comment

              Working...
              X