Ver Mensaje Individual
  #1  
Antiguo 05-10-2005
OzzyzzO OzzyzzO is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 12
Reputación: 0
OzzyzzO Va por buen camino
Exclamation Problemas al guardar componentes con TStream!!

Hola!

Estoy desarrollando una aplicación en la que creo componentes en forma dinámica, y al cerrar el form los guardo en un archivo de texto para volver a recuperarlos en el momento en que vuelva a ejecutar la aplicación. Esto lo logro con una función que saqué de la ayuda de delphi con una pequeña modificación:

Código Delphi [-]
// Esta función convierte el componente a un string (¿obvio no?)
function ComponentToString(Component: TComponent): string;
var
  BinStream:TMemoryStream;
  StrStream: TStringStream;
  s: string;
begin
  BinStream := TMemoryStream.Create;
  try
    StrStream := TStringStream.Create(s);
    try
      BinStream.WriteComponent(Component);
      BinStream.Seek(0, soFromBeginning);
      ObjectBinaryToText(BinStream, StrStream);
      StrStream.Seek(0, soFromBeginning);
      Result:= StrStream.DataString;
    finally
      StrStream.Free;

    end;
  finally
    BinStream.Free
  end;
end;

// Esta función convierte un string  a componente nuevamente
function StringToComponent(Value: string; Component: TComponent): TComponent;//acá meti la mano
var
  StrStream:TStringStream;
  BinStream: TMemoryStream;
begin
  StrStream := TStringStream.Create(Value);
  try
    BinStream := TMemoryStream.Create;
    try
      ObjectTextToBinary(StrStream, BinStream);
      BinStream.Seek(0, soFromBeginning);
      Result := BinStream.ReadComponent(Component);//acá meti la mano

    finally
      BinStream.Free;
    end;
  finally
    StrStream.Free;
  end;
end;

Ahora bien, funciona todo correctamente mientras guarde un componente que no tiene subcomponentes, por ejemplo, un TButton. El problema surge cuando intento recuperar un componente con subcomponentes, es decir un componente de mi creación, derivado de TCustomPanel, que tiene un TImage, un TStaticText y un TPopupMenu; el error que surge es: "class TImage not found".

Estas funciones las encontré en el ejemplo de la ayuda del método WriteComponent del componente TStream.

Se que en otro hilo del foro se describió otra forma de realizar esto, pero mi pequeño cerebrito fué incapaz de procesar esa información ya habiendo empezado con este método .

Espero haber sido lo suficientemente claro.

Agradezco a todo aquel que aporte alguna pista.
__________________
Juan Pablo
Responder Con Cita