Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-09-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Si ya tenes componentes, por que no llamar directamente a los métodos WriteComponente y ReadComponent del stream?

Código Delphi [-]
begin
  Conta := TConta.Create;
  Conta.Propiedad := Valor;
  Conta.OtraPropiedad := OtroValor;
  s := TFileStream.Create('c:\conta.dat', fmCreate);
  try
    s.WriteComponent(Conta);
  finally
    s.Free;
  end;

A mi me parece mucho mas limpio.

Ahora, ayer a partir de la charla, como me quedé algo picado con el tema, busqué un par de referencias y me encontré con la biblioteca RTTI Library, que creo te será de utilidad, con la ventaja que tus clases no tienen por que ser componentes.

No la he probado, pero tiene buena pinta y ya tiene procedimientos como SaveObjToIniFile que pueden serte de utilidad.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #2  
Antiguo 30-09-2006
Uoha Uoha is offline
Registrado
 
Registrado: sep 2006
Posts: 3
Poder: 0
Uoha Va por buen camino
Problema newbie, resuelto

Cita:
Empezado por jachguate
Si ya tenes componentes, por que no llamar directamente a los métodos WriteComponente y ReadComponent del stream?
Gracias , había probado con ese método y no lograba hacerlo andar.... hasta que vi que pusiste el ejemplo con propiedades y caí en que estaba usando fields, y que solo puedo exportar propiedades published (que poseen RTTI). Cambié todo a propiedades 'publicadas' y anduvo perfecto.

Voy a hecharle una ojeada al link.

Gracias!
Responder Con Cita
  #3  
Antiguo 14-05-2007
Avatar de juangiron
juangiron juangiron is offline
Miembro
 
Registrado: ene 2007
Posts: 26
Poder: 0
juangiron Va por buen camino
pregunta

hola... necesito guardar un objeto en algun tipo de archivo, la respuesta que diste no funciona por que existe una incompatibilidad de tipos Tcopmponent y Tobjeto (que es mi clase)... toca hacer algun tipo de casteo o algo asi?? si es asi como lo hago??
Responder Con Cita
  #4  
Antiguo 14-05-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

En un "TObject" contarás con determinados que estarán también en la clase "TComponent". Porque "TComponent" hereda en última instancia de "TObject". Pero los métodos implementados por "TComponent" no están disponibles en "TObject" y clases derivadas de "TObject" que no hereden de "TComponent", claro.

La cuestión es que tal vez podrías heredar tu clase de "TComponent", en lugar de "TObject". De este modo ya podrías utilizar los métodos "LoadComponent" y "WriteComponent". No podrás hacerlo mientras tu clase no herede de "TComponent", a no ser que tú mismo te encarges de implementar métodos similares.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 14-05-2007
Avatar de juangiron
juangiron juangiron is offline
Miembro
 
Registrado: ene 2007
Posts: 26
Poder: 0
juangiron Va por buen camino
PRegunra

hola logre guardar mis objetos que estan almacenados en un array asi:

Código Delphi [-]
procedure TFrmPrincipal.ToolButton14Click(Sender: TObject);
var
  FS: TFileStream;
  I:Integer;
begin
SaveDialog1.Filter:='Archivo XML(*.dat|*.DAT';
if SaveDialog1.Execute then
begin
   try
  FS := nil;
  try
    FS := TFileStream.Create(SaveDialog1.FileName, fmCreate);
    for I := 0 to High(ArrayObjetos) do
       FS.WriteComponent(ArrayObjetos[i].getObjeto);
  finally
    FS.Free;
  end;
  finally
   ShowMessage('Archivo Guardado');
  end;
  end;
end;

pero al hacer la funcion de cargar?

cual seria el Tobjet?

Código Delphi [-]
procedure TFrmPrincipal.ToolButton3Click(Sender: TObject);
var
  FS: TFileStream;
  newO:TObjeto;
  I:Integer;
begin
OpenDialog1.Filter:='Archivo dat(*.dat|*.DAT';
if OpenDialog1.Execute then
begin
   try
  FS := nil;
  try
    FS := TFileStream.Create( OpenDialog1.FileName, fmOpenRead );

   //  for I := 0 to   High(FS) do --> NEcesito hacer un FOR???
     FS.ReadComponent(TObjeto.create);
  finally
    FS.Free;
  end;
   finally

   end;
end;
end;

lo que quiero hacer es leer el archivo y meter estos datos en un array de objetos, debo hacer un for del FS?? como asigno el objeto a mi array para poder acceder a los metodos SET y GET de mi objeto (Tobjeto es mi clase de Objetos, no es igual a TObject)

gracias
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Clase, objeto, tipo? [Gunman] OOP 3 04-01-2006 16:11:32
Como guardar un objeto en un archivo ? cmurua71 OOP 7 18-11-2005 21:26:30
Cargar Objeto Table jzk OOP 2 21-09-2005 12:51:51
Guardar y Cargar un reporte por código... emeceuy Impresión 3 30-12-2004 12:07:16
Controlar eventos de una clase propia keglevich OOP 4 15-09-2004 13:58:21


La franja horaria es GMT +2. Ahora son las 12:11:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi