Announcement

Collapse
No announcement yet.

dynamische Objekterstellung

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

  • dynamische Objekterstellung

    Hallo,<p>

    wie kann ich zur Laufzeit ein Objekt dynamisch mit Hilfe <br>
    einer Zeichenkette (entspricht gleich dem Klassenamen) erstellen ?<br>
    <br>
    an Stelle von ...<br>
    <br>
    procedure Form1.ErstelleXObjekt (sKlassenName : String);<br>
    var xEdit : TEdit;<br>
    var xButton : TButton;<br>
    begin<br>
    if sKlassenName = 'TEdit' then <br>
    begin<br>
    xEdit := TEdit.Create (Self);<br>
    end;<br>
    if sKlassenName = 'TButton' then <br>
    begin<br>
    xButton := TButton.Create (Self);<br>
    end;<br>
    // und so fort <br>
    ...<br>
    end;<br>
    <br>
    moechte ich eine einfachere Funktion die auf das RTTI zugreift ...<br>
    <br>
    procedure Form1.ErstelleXObjekt (sKlassenName : String);<br>
    var xObject : TObject;<br>
    begin<br>
    xObject := ErstelleObjektZurLaufzeit (sKlassenName, self oder Instance oder ???);<br>
    xObject := ErstelleObjektZurLaufzeit ('TButton', self oder Instance oder ???);<br>
    <br>
    ...<br>
    end;<br>
    <br>
    kann mir jemand sagen, ob es eine Funktion fuer "ErstelleObjektZurLaufzeit" gibt ?<br>
    <br>
    Gruss und Dank<br>
    Dietmar

  • #2
    Hi

    Jain :-)

    Schau mal bei RegisterClass() und GetClass() nach.
    Mit RegisterClass() lassen sich Klassen registrieren, z.B.

    <pre>
    RegisterClasses([TButton, TImage, TForm]);
    </pre>

    und mit GetClass(ClassName): TClass läßt sich dann eine registrierte Klasse zurückgeben.

    Also:

    <pre>

    RegisterClasses([TButton, TForm, TImage]);

    var
    Class: TClass;
    Obj: TObject;

    Class := GetClass('TButton');

    Obj := Class.Create;

    // oder kurz

    Obj := GetClass('TButton').Create;

    </pre>

    Gruß Hage

    Comment

    Working...
    X