2004. november 4., csütörtök

How to save components to a file or stream (2)


Problem/Question/Abstract:

I would like to stream selected components (say a panel with some other components on it) to a DFM like (text preferred over binary) file and be able to load it and restore them programatically.

Answer:

You need to save this component with root (where its handlers are declared), f.e., with TFormX:

{ ... }
type
  TForm1 = class(TForm)
    MyComponent: TMyComponent;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
  public
    constructor Create(AOwner: TComponent); override;
    function FormFileName: string;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.FormFilename: string;
begin
  Result := ExtractFilePath(ParamStr(0)) + Classname + '.DAT';
end;

constructor TForm1.Create(AOwner: TComponent);
var
  fname: string;
begin
  RegisterClass(TMyComponent); {And anything else that is required }
  fname := FormFilename;
  if FileExists(fname) then
  begin
    CreateNew(AOwner);
    ReadComponentResFile(fname, Self);
  end
  else
    inherited Create(AOwner);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  WriteComponentResFile(FormFileName, Self);
  UnregisterClass(TMyComponent);
end;

Nincsenek megjegyzések:

Megjegyzés küldése