Hallo,
ich habe bei mir folgendes im Einsatz:
Delphi-Quellcode:
Type
TCmdClass = class of TCmd;
TCmd = class(TPersistent)
[...]
Nun gibt es folgende Funtkion, die ohne auch Instanz-Erstellung aufgerufen werden kann
Delphi-Quellcode:
class function TCmd.CreateByClassname(
const aClassName:
string): TCmd;
var
tc: TPersistentClass;
begin
result:=
nil;
tc:= GetClass(aClassName);
If assigned(tc)
then
begin
result:= TCmdClass(tc).Create;
If not assigned(result)
then
raise Exception.Create(Format('
Befehl ''
%s''
konnte nicht erstellt werden.', [aClassName]));
end else
raise Exception.Create(Format('
Klasse ''
%s''
ist nicht registriert', [aClassName]));
end;
AssignTo wurde in dieser Klasse überschrieben, so dass alle
öffentlichen Eigenschaften kopiert werden können (Code hier aus dem Forum):
Delphi-Quellcode:
procedure TCmd.AssignTo(Dest: TPersistent);
var count,i:integer;
List:PProplist;
Info:PPropInfo;
begin
count:=GetPropList(self,List);
try
for i:=0 to count-1 do
begin
Info:=List^[i];
setpropvalue(dest,Info^.Name,getpropvalue(self,Info^.Name));
end;
finally
freemem(list);
end;
end;
Nach Erstellung des Objektes über CreateByClassname(QuellObjekt.ClassName)
kann dann über das neue Objekt Assign() aufgerunfen werden und
die Eigenschaften des Quellobjektes werden übernommen.
Gruß
Jürgen