|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"メインフォームを丸ごと保存"
こんにちは、凛です。
nifty:FDELPHI/MES/16/1131 に示されているようにCreateNewを使うとフォーム
を丸ごと保存できます。しかし、メインフォームを保存するにはちょっとした工
夫がいります。 なぜならApplicaton.MainFormがnilだとApplicaton.Run時に速
攻で終了するようになっており、MainFormはApplication.CreateFormメソッドで
セットされ、Application.CreateFormではTForm.CreateNewではなく、
TForm.Createが呼ばれてしまうからです。 というわけで、以下はメインフォー
ムを丸ごと保存/復元するための工夫のコードです。要はCreateをOverRideし
て、データの有無でCreateNewとCreate どっちをInheriteするか分岐している
だけです。
フォームにボタンとラベルを一つづ貼り付けます。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
constructor create(AOwner:TComponent);OverRide;//追加
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
const SaveFileName='c:\poo.dfm';
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.caption:='サンプルデータ';
Color:=clRed;
end;
constructor TForm1.Create(AOwner: TComponent);
var
FS:TFileStream;
begin
if FileExists(SaveFileName) then
begin
FS:=TFileStream.Create(SaveFileName,fmOpenRead);
inherited CreateNew(AOwner);
FS.ReadComponent(Self);
FS.Free;
end
else inherited;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
FS:TFileStream;
begin
FS:=TFileStream.Create(SaveFileName,fmCreate);
FS.WriteComponent(Self);
FS.Free;
end;
end.
2000/10/15(Sun) 02:03am MXB01744 凛
Original document by 凛 氏 ID:(MXB01744)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|