お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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