Ver Mensaje Individual
  #1  
Antiguo 14-01-2019
mak8888 mak8888 is offline
Miembro
 
Registrado: sep 2003
Posts: 40
Reputación: 0
mak8888 Va por buen camino
Guardar componentes del formulario a un archivo

Buenos días. Tengo una utilidad en la cual el usuario inserta dinámicamente objetos dentro de un Panel.
El problema radica en que me gustaría que pueda guardar la distribución de componentes inserta (y posicionada en el panel) a un archivo, de cara a poder restaurarlos posteriormente.
Aquí he visto un ejemplo en el que guardan un componente y posteriormente lo cargan, lo cual se aproxima mucho a lo que yo quiero.
Tengo dos problemas.
1. He intentado modificar la función de guardado para que guarde todos los componentes del Panel, pero solo guarda el último. Imagino que será por el "Memstrem.position := 0;", pero no sé porqué habría que cambiarlo.
Código Delphi [-]
procedure SaveComponentToFile(Component: TComponent; const FileName: TFileName);
var
  FileStream : TFileStream;
  MemStream : TMemoryStream;
  i : integer;
begin
  MemStream := nil;

  if not Assigned(Component) then
    raise Exception.Create('Component is not assigned');

  FileStream := TFileStream.Create(FileName,fmCreate);
  try
    MemStream := TMemoryStream.Create;
    for I := Form1.Panel1.ControlCount - 1 downto 0 do
        MemStream.WriteComponent(Form1.Panel1.Controls[i]);
    MemStream.Position := 0;
    ObjectBinaryToText(MemStream, FileStream);
  finally
    MemStream.Free;
    FileStream.Free;
  end;
end;

2. Al cargar el archivo de texto con el componente, por medio de la función LoadComponentFromFile, me da un error diciendo "property glyph data does not exists". Es decir, no consigue cargar el glyph del TBitBtn que previamente insertó el usuario y que se veía perfectamente cuando lo insertó.
Os muestro el código que guarda la función "SaveComponentToFile" y que posteriormente no es capaz de cargar la función "LoadComponentFromFile".

Cita:
object M1: TBitBtn
Left = 20
Top = 10
Width = 79
Height = 41
Caption = 'M1'
Glyph.Data = {
360C0000424D360C000000000000360000002800000020000000200000000100 ......
¿Se os ocurre cómo solucionarlo?
Gracias de antemano a todos.
Un saludo.
Responder Con Cita