AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt klonen?

Ein Thema von Namenloser · begonnen am 15. Mär 2009 · letzter Beitrag vom 15. Mär 2009
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz