Delphi - clonar un objeto

 
Vista:

clonar un objeto

Publicado por diego Gutierrez (15 intervenciones) el 21/09/2007 00:53:43
hola, estoy intentando clonar un objeto para un desarrollo algo loco, estuve leyendo eninternet y al parecer, la mejor forma es usar Memory Stream para cargar el objeto y luego escribirlo en otro nuevo, pero no lo logro conseguir, ya que siempre me marca stream read error, alguien tiene idea de que es lo que pasa, anexo un codigo ejemplo:

procedure TFrmTableroAlmacen.ChartDiasDeInventarioDblClick(Sender: TObject);
var
ms: TMemoryStream;
s: string;
p, temp: TPanel;
x,y: Integer;
caliz: TDBChart;
begin
ms := TMemoryStream.Create;
try
ms.WriteComponent(ChartDiasDeInventario);
caliz:=TDBChart(ms.ReadComponent(ChartDiasDeInventario)); ///aqui es donde me marca el error
ChartDiasDeInventario.Name:='ChartDiasDeInventarioOrigina';
temp := panel1;
s := panel1.Name;
panel1.Name := '';
try
ms.WriteComponent(temp);
ms.Position := 0;
p := TPanel.Create(Self);
ms.ReadComponent(p);
with p do
begin
x := panel1.Left;
y := panel1.Top;
Inc(x, 5);
Inc(y, 5);
SetBounds(x, y, Width, Height);
Parent := Self;
Name := Format('Panel%d_%d', [x, y]);
end;
finally
temp.Name := s;
panel1 := temp;
end
finally
ms.Free;
end; { finally }
end;

garcias por leer
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:clonar un objeto

Publicado por emilo (175 intervenciones) el 21/09/2007 22:56:49
Mira no me hace falta ver tu codigo para decirte que los objetos no se pueden clonar, en la OOP lo de dolly no va, si te documentaras un poco mas antes de hacer las cosas perderias menos tiempo, pero bueno... aca tienes una solucion, utiliza el metodo Assign()
este metodo copia todos los datos de un objeto a otro, no habras clonado el objeto pero si tedras un objeto con los mismo datos.

Ejemplo:

var
MyObjeto1,MyObjeto2 : TMyObjeto;

MyObjeto1 := TMyObjeto.Create; { TMyObjeto debe decender en algun momento de la jerarquia de TPersistent que es quien aporta el metodo Assign();}

MyObjeto2 := TMyObjeto.Create;

MyObjeto2.Assign(MyObjeto1); {se copian todos los valores de los campos de MyObjeto1 a MyObjeto2.}

Utilizando assing puedes tener una copia exacta de los valores de un objeto en otro, pero fijate que tienes que crear al objeto al que deseas copiar los datos asi que tambien tienes que liberarlo por individual MyObjeto1.free; MyObjeto2.free; si lo de deseas copiar son classes de la VCL todas ellas dan soporte a assign garantizando la copia de todos los campos, ahora si tu clase es una clase de que creastes tu, debes atropellar a assign y para implementar la copia de los campos de tu clase.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:clonar un objeto

Publicado por diego gierrez (15 intervenciones) el 21/09/2007 23:03:09
perdon, es que soy nuevo en eso de delphi pero estoy mu "javaizado" y pues en java, cualquier objeto que erede de Object tiene un metodo que es clone, que regresa una nueva instancia que en si es una copia fiel del objeto que la llamo

afortunadamente segui linvestigando en la red y llegue a exactamente la misma comclusion que tu me mandas, gracias por responder
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:clonar un objeto

Publicado por emilo (175 intervenciones) el 21/09/2007 23:17:38
Una pregunta para el javisado, :) que crees de Delphi, es un mal lenguaje??, lo prefieres antes que Java??.

Me gustaria que me dieras tu opinon, ya que hace rato que me quieren meter a Java por los ojos y aunque lo domino no me nace programar en el, asi como C++ o el C# , los conosco todos pero cada ves que me siento ante delphi, va... eso es solo comparable con una experiencia religiosa. Esto si es una lenguaje digno de aprender :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:clonar un objeto

Publicado por diego gutierrez (15 intervenciones) el 21/09/2007 23:30:07
pues yo diria que es de gustos a gustos, llevo 2 años programando en java y pues entre a una nueva empresa y tengo que programar para delphi, sin embargo me siento mas comodo con java, ya que como es "abierto" es mas accesible para toda la gente y eso motiva a que mas gente lo tenga sin necesidad de pagar fuertes sumas de dinero por una liscencia ,esto ayuda a que el flujo de ejemplos por la red sea mas amplio.

Tambien las librerias buenas, en su mayoria son gratis ya que muchas empresas apuestan por este lenguaje, tambien debido a que el lenguaje en sí, ha pasado a ser open source, es mas probable a que crezca en proporciones mas rapidas que cualquei otro lenguaje propietario.

Algo que tambien me late es que es 100% portable, con el unico inconveniente de que hay que instalar el jre en la maquina que se desea ejecutar la aplicacion, sin embargo, los programas o desarrollos de delphi son muy dependientes de windows aquellos que son graficos o que utilizan librerias de microsof (esto ultimo no estoy 100% seguro, espero no equivocarmet
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:clonar un objeto

Publicado por Diego Romero (25 intervenciones) el 22/09/2007 02:11:23
Estás confundido. Un lenguaje no es "open source", lo que es open source es el compilador, pero no el lenguaje.

Delphi no es un lenguaje, es un compilador, el lenguaje en Object Pascal.

Para hacer la comparación tendrías que dividir entre lenguajes estadarizados (por la ISO o ANSI) y no estandarizados. Object Pascal está estandarizado, no sé el status de Java, esto quiere decir que cualquiera puede hacer un compilador para Object Pascal. Pues resulta ser que Delphi es el compilador más extendido de Object Pascal pero no es el único (también está FreePascal entre otros).
Un ejemplo de lenguaje no estandarizado (lo que llamas propietario) podría ser Visual Basic o Clarion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar