Announcement

Collapse
No announcement yet.

Klassenreferenzen

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

  • Klassenreferenzen

    <body>

    <p><font face="Arial">In der Hilfe findet man folgendes Beipiel:</font>
    <p><font face="Arial">type TControlClass = class of TControl;</font></p>
    <p><font face="Arial">function CreateControl(ControlClass: TControlClass; const
    ControlName: string; X, Y, W, H: Integer): TControl; <br>
    begin <br>
    </font>&nbsp; <font face="Arial">Result := ControlClass.Create(MainForm); <br>
    &nbsp; with Result do <br>
    &nbsp;begin <br>
    &nbsp;&nbsp; Parent := MainForm; <br>
    &nbsp;&nbsp; Name := ControlName; <br>
    &nbsp;&nbsp; SetBounds(X, Y, W, H); <br>
    &nbsp;&nbsp; Visible := True; <br>
    &nbsp; end; <br>
    end;</font>
    <p><font face="Arial">Der Funktion CreateControl wird eine Klassenreferenz als
    Parameter übergeben. Er bestimmt, welche Art von Steuerelement erstellt wird.
    Der Parameter wird anschließend beim Aufruf des Konstruktors verwendet. Da
    Klassentypbezeichner Klassenreferenzwerte enthalten, kann im Aufruf von
    CreateControl der Bezeichner der Klasse angegeben werden, um eine Instanz vor
    ihr zu erstellen:</font>
    <p><font face="Arial">CreateControl(TEdit, 'Edit1', 10, 10, 100, 20);</font></p>
    <p>&nbsp;</p>
    <p><font face="Arial">Ich brauche etwas ähnliches. Ich will eine Routine
    schreiben der ich eine von TForm abgeleitete Klasse übergebe. Soweit kein
    Problem. Ich möchte das Result <br>
    aber in der jeweiligen Formularvariable haben. Wenn ich das mit einem Fenster
    meiner Anwendung probiere, bekomme ich für ein Form frmKto: TfrmKto immer eine
    Typenunverträglichkeit. Der Rückgabetyp muss also eigentlich auch dem
    übergebenen ClassNamen entsprechen.</font></p>
    <p><font face="Arial">Hintergrund ist, dass meine Anwendung über 100
    verschiedene Forms hat. Da ich nicht will, dass die die ganze Zeit im Speicher
    rumhängen, erzeuge ich sie dann wenn sie gebraucht werden, und gebe sie beim
    Schließen wieder frei.</font></p>
    <p><font face="Arial">Das sieht dann immer so aus:</font></p>
    <p><font face="Arial">if frmKto = nil then</font></p>
    <p><font face="Arial">&nbsp; frmKto = TfrmKto.Create(Application)</font></p>
    <p><font face="Arial">with frmKto do</font></p>
    <p><font face="Arial">...irgendwas</font></p>
    <p><font face="Arial">Dafür suche ich einfach eine bessere Variante so in der
    Art:</font></p>
    <p><font face="Arial">with LoadForm(frmKto,TfrmKto,Application) do</font></p>
    <p><font face="Arial">...irgendwas</font></p>
    <p><font face="Arial">Kann jemand helfen?</font></p>
    <p>&nbsp;</p>
    <p><font face="Arial">Mit freundlichen Grüßen</font></p>
    <p><font face="Arial">Andreas Käding</font></p>

    </body>

  • #2
    Hallo!<br>
    Leider habe ich keine direkte knappe Lösung für Dich aber: <a href="/webx?50@@.ee86b38">Markus Schmidt "Dynamische Laden von packages funktioniert nicht HILFE!" 04.03.2004 16:07</a> ist die Art, wie auch wir die Sache mit den vielenvielen Formularen angegangen sind.<br>
    Ist sicherlich einiges an Umstellungsarbeit aber es läuft perfekt!!!!<br>
    BYE BERN

    Comment


    • #3
      Hallo Andreas,<BR><BR>
      hier noch ein Beispiel mit weniger Code zum einfachen Verständnist:
      <a href="http://www.reim-edv.de/download/formclass.zip">http://www.reim-edv.de/download/formclass.zip</a><BR><BR>
      Fran

      Comment

      Working...
      X