最大化で終了した時の次回起動の最大化







  INI/Reg 簡単アクセスコンポ RegMng 本田勝彦さん INIで使用する例
 RegManager1.RegType := rtIni;
(fTop, fLeft, fHeight, fWidth: Integer; はなくても出来ます
 本田さんの例のように直に読み書きしても良いです
 RegManager1['Form1Width'].AsInteger := Form1.Width;)



  private
    { Private 宣言 }
    fTop, fLeft, fHeight, fWidth: Integer;
    fMaxForm : Boolean; //フラグ

  public
    { Public 宣言 }

      // フォームの最大化判定
    procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SYSCOMMAND;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
 inherited;
  case (Msg.CmdType and $FFFFFFF0) of
    SC_MAXIMIZE : fMaxForm := True;   // 最大化された
    SC_RESTORE  : fMaxForm := False;  // 元のサイズに戻った
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   RegManager1.RegType := rtIni;
   RegManager1.IniFileName :=
       ChangeFileExt(Application.ExeName, '.ini');
   fTop := RegManager1['fTop'].AsInteger;
   fLeft := RegManager1['fLeft'].AsInteger;
   fHeight := RegManager1['fHeight'].AsInteger;
   fWidth := RegManager1['fWidth'].AsInteger;
   fMaxForm := RegManager1['fMaxForm'].AsBoolean;

   if fMaxForm then
   begin
   //デフォールトの位置大きさに設定
   Top := 16;
   Left := 16;
   Height := 580;
   Width := 780;
   end
   else
   begin
   //通常のフォームサイズ位置の復帰
   Top := fTop;
   Left := fLeft;
   Height := fHeight;
   Width := fWidth;
   end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
   //最大化でフォームを表示させる
   if fMaxForm then
      begin
      Form1.WindowState := wsMaximized;
      end;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
    RegManager1['fTop'].AsInteger := Top;
    RegManager1['fLeft'].AsInteger := Left;
    RegManager1['fHeight'].AsInteger := Height;
    RegManager1['fWidth'].AsInteger := Width;
    RegManager1['fMaxForm'].AsBoolean := fMaxForm;
end;












Back