Clonagem

Delphi

10/01/2005

Gostaria de saber como faço para clonar um ´[b:74b6dba1c1]Objeto[/b:74b6dba1c1]´? E não um componente!
Bem! Tenho um exemplo q como clonar um componente mas para clonar um objeto qualquer não funciona.

Estou mandando um exemplo bem simples de uma classe q poderia ter seus objetos clonados!

TEstado = class
valor1,
valor2: byte;
end;

Atenciosamente Fernando


Fernando Piccini

Fernando Piccini

Curtidas 0

Respostas

Massuda

Massuda

10/01/2005

Você pode incluir seu próprio método de clonagem na sua classe.
type
  TEstado = class 
    valor1: byte; 
    valor2: byte; 
  public
    function Clone: TEstado;
  end; 

function TEstado.Clone: TEstado;
begin
  Result := TEstado.Create;
  Result.valor1 := Self.valor1;
  Result.valor2 := Self.valor2;
end;

O esquema usual de clonagem de objetos costuma se basear na idéia usada em TPersistent.Assign. Para um exemplo, dê uma olhada [url=http://groups.google.com.br/groups?hl=pt-BR&lr=&threadm=VA.00004992.0094fc83¬40antispam.compuserve.com&rnum=1&prev=/groups¬3Fq¬3DPeter¬2520Below¬2520TRgroup¬26hl¬3Dpt-BR¬26lr¬3D¬26sa¬3DN¬26tab¬3Dwg]nesta discussão no NG da Borland[/url].


GOSTEI 0
Paulo_amorim

Paulo_amorim

10/01/2005

Olá

Você não pode declará-lo como TPersistent ? Se sim, utilize o método Assign dele
No help do Delphi terá mais informações

Espero que ajude
Até+


GOSTEI 0
Fernando Piccini

Fernando Piccini

10/01/2005

Massuda! vlw pela ajuda testei o código q vc envio e funcionou!

Agora consigo fazer a clonagem do [b:93bb24b5f9]Objeto[/b:93bb24b5f9] ou seja, consigo criar um novo em vez de ser dois ponteiros p/ o mesmo obj.

vlw ai gente! :D


GOSTEI 0
Fernando Piccini

Fernando Piccini

10/01/2005

Este Exemplo q consigue eh para clonar [b:e56a974b89]Componentes[/b:e56a974b89].

function CloneComponent(ComponentSource: TComponent; var ComponentClone: TComponent: CloneName: String): boolean;
var
CompStream: TMemoryStream;
begin
try
CompStream: TMemoryStream.Create;
CompStream.WriteComponent(ComponentSource);
CompStream.seek(0,soFromBeginning);
ComponentClone.Name:= CloneName;
result:= true;
except
result:= false;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
CloneLabel; TLabel;
begin
CloneLabel:= TLabel.create(nil);
CloneComponent(Label1, TComponent(CloneLabel), ´CloneLabel1´);
CloneLabel.parent:= form1;
CloneLabel.left:= 100;
CloneLabel.Top:= 100;
CloneLabel.Caption:= CloneLabel.Name;
end;


GOSTEI 0
Paulo_amorim

Paulo_amorim

10/01/2005

Olá

Para clonar componentes não basta fazer esse codigo?
<componente>.Assign(<Outro componente>);


Isso que eu saiba, claro

Até+


GOSTEI 0
POSTAR