Moin!
Jo, 2 Dinge noch dazu:
1.
Delphi-Quellcode:
Geometrien[0] := GetMetaClassForID ('QUADER').Create ;
Geometrien[1] := GetMetaClassForID ('KUGEL').Create ;
Da brauchst du kein Create mehr, die GetMetaClassForID() macht das schon intern und gibt dir schon das Ergebnis von dem Constructor-Aufruf zurück. Also du bekommst mit jedem Aufruf von GetMetaClassForID() eine ordentliche neue Instanz geliefert.
2. Ja, bei der abstrakten Methode ist das soweit ok, du musst nur noch oben in der Klasse ein Override hinten mit angeben:
Delphi-Quellcode:
TKugel = class (TGeometrie)
public
class Function ObjectID : string; Override;
end ;
...
class function TKugel.ObjectID: string;
begin
Result := 'KUGEL' ;
end;
Und dann sollte das klappen!
Ach ja: du gibst ja jetzt noch das "Kugel" und "Quadrat" direkt an - aber später liest du die Strings doch aus der Textdatei, oder? Weil so hatte ich es mir ja gedacht, dann brauchst du später auch nicht mehr angeben, das du jetzt eine Kugel brauchst sondern du liest einfach nur den Typ aus der Datei...
Ansonsten solltest du vielleicht noch eine Fehlerbehandlung mit einbauen, weil wenn du ihm einen unbekannten Typstring übergibst (also einen String wozu keine Klasse registriert ist), dann bekommst du eine
Exception. Diese solltest du abfangen und dem entsprechend reagieren.
Und nochwas: wenn du in der GetMetaClassForID Funktion die AID mit einem UpperCase() umschliesst, dann kannst du auch ruhig "Kugel" oder so schreiben und musst somit nicht mehr auf Gross- und Kleinschreibung achten. Auch die Klassen können bei ObjektID dat ganze klein geschrieben - oder halt normal geschrieben zurück geben.
MfG
Muetze1