Vielleicht mal etwas allgemeiner:
Man kann seine Klassen registrieren, damit Objekte dieser Klasse zur Laufzeit erzeugt werden können. Das ist aber etwas aufwendig.
Ungefähr läuft das dann so ab:
Delphi-Quellcode:
// nur smbolischer Code, die genauen Funktionen habe ich nicht im Kopf
VorbereitungFuerBaum;
VorbereitungFuerHaus;
RegisterClass(TBaum, THaus);
...
Baum := CreateObject(TBaum);
Haus := CreateObject(THaus);
(Such mal ggf. nach "Objekte nach Klassennamen erzeugen" o.ä.)
Einfacher kannst Du das natürlich auch selbst in die Hand nehmen:
Delphi-Quellcode:
function GetNewObject(aClassName: String): TObject;
begin
if aClassName = 'TBaum' then
Exit(TBaum.Create(Self));
if aClassName = 'THaus' then
Exit(THaus.Create(Self));
if aClassName = 'Irgendwas' then
Exit(TXYZ.Create(Self));
Result := nil;
end;
Wenn alle Objekte von einer bestimmten Basisklasse abgeleitet werden, dann kann man geschickter Weise diese Basisklasse als Rückgabetyp der Funktion wählen.
Vielleicht nützt das als praktischer Ansatz.