Thema: Delphi Objekt klonen?

Einzelnen Beitrag anzeigen

Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Objekt klonen?

  Alt 15. Mär 2009, 09:29
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
Jürgen Höfs
  Mit Zitat antworten Zitat