Te pongo un ejemplo.
La meta será tener un
frame:
Código Delphi
[-]
type
TDesignerFrame = class(TFrame)
public
procedure LoadFromFile(FileName: String);
procedure SaveToFile(FileName: String);
end;
Para cada instancia de este
frame que uses puedes usar los métodos indicados para guardar las componentes a un archivo o para cargarlas desde un archivo y podrás usar un archivo distinto para cada
frame.
El requisito básico aquí es que el
frame sea el
owner de las componentes que contenga, de lo cual te puedes asegurar al momento de crearlas:
Código Delphi
[-]
with TEdit.Create(FrameDesigner1) do
begin
Left := 8;
Top := 8;
Text := 'Hola mundo';
Parent := FrameDesigner1;
end;
La implementación de los métodos LoadFromFile y SaveToFile es así:
Código Delphi
[-]
procedure TDesignerFrame.LoadFromFile(FileName: String);
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead);
try
Stream.ReadComponent(Self);
finally
Stream.Free;
end;
end;
procedure TDesignerFrame.SaveToFile(FileName: String);
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmCreate);
try
Stream.WriteComponent(Self);
finally
Stream.Free;
end;
end;
Para que esto funcione deberás registrar manualmente las clases de componentes que desees manejar en tus
frames:
Código Delphi
[-]
RegisterClasses([TEdit, TListBox, TButton, TMemo]);
lo cual puedes hacer en la sección
initialization de la unidad que define al
frame.
// Saludos