Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Guardar componentes del formulario a un archivo (https://www.clubdelphi.com/foros/showthread.php?t=93692)

mak8888 14-01-2019 07:48:19

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.

mak8888 15-01-2019 13:15:54

Al final lo solucioné gracias al código de esta publicación.
Gracias a todos.

Casimiro Notevi 15-01-2019 19:52:00

Los componentes RXlib también tienen opción para hacerlo, aunque ya lo has resuelto con el que indicas.

mak8888 16-01-2019 15:26:13

Gracias Casimiro.
Un saludo.


La franja horaria es GMT +2. Ahora son las 12:20:00.

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