Ver Mensaje Individual
  #4  
Antiguo 28-10-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita