16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"フォームの位置を保存/復元"
この発言に対し以下のコメントが寄せられています
#01082 ぶんぶん鈴木 さん フォームの位置を保存/復元(レジストリ版
本会議室の最初の発言で同じような内容のサンプルを書き込んでありますが、
これはそのグレードアップ版です。
フォームのイベントではなく、一般的な手続にしてありますので
よく使う関数をまとめたユニットにでも入れておいていただければ便利かと。
使う側(フォームのメンバー関数内から)
保存:
SaveWindow(self);
復元:
RecoverWindow(self);
だけでOK。
一つのプロジェクトに複数のフォームがあっても
各フォームで同様にしてOKです。
iniファイルはディフォルトで実行ファイルと同じ名前で拡張子が .ini に
なるようにしてありますが、違う名前にするなら path パラメータにフルパスで
指定します。iniファイル内のセクションはフォームの名前を使いますが、それ
も指定したければ SectionパラメータをセットすればOKです。
前回のものからの改善点はいろいろありますが、一番大きいのはフォームから
独立した手続にしたことと、タスクバーとタイトルバーが重なってしまわないよ
うにしたことです。
procedure RecoverWindow(Form:TForm;Section:string='';path :string ='');
var
ini:TInifile;
WRect:TRect;
begin
if Section='' then Section:=Form.name;
SystemParametersInfo(SPI_GETWORKAREA,0,@WRect,0);
if path='' then path:=ChangeFileExt(ParamStr(0),'.ini');
ini:=TInifile.create(path);
try
Form.Top:=ini.readInteger(Section,'Top',WRect.Top);
Form.Left:=ini.readInteger(Section,'Left',WRect.Left);
Form.Width:=ini.readInteger(Section,'Width',Form.Width);
Form.Height:=ini.readInteger(Section,'Height',Form.Height);
//はじっこ過ぎたら戻すコード
if Form.Left>WRect.Right-100 then Form.Left:=WRect.Left;
if Form.Left<WRect.Left then Form.Left:=WRect.Left;
if Form.Top<WRect.Top then Form.Top:=WRect.Top;
if Form.Top>WRect.Bottom-100 then Form.Top:=WRect.Top;
finally
ini.free;
end;
end;
procedure SaveWindow(Form:TForm;Section:string='';path :string ='');
var
ini:TInifile;
begin
if Section='' then Section:=Form.name;
if path='' then path:=ChangeFileExt(ParamStr(0),'.ini');
ini:=TInifile.create(path);
try
ini.WriteInteger(Section,'Top',Form.Top);
ini.WriteInteger(Section,'Left',Form.Left);
ini.WriteInteger(Section,'Width',Form.Width);
ini.WriteInteger(Section,'Height',Form.Height);
ini.UpdateFile;
finally
ini.free;
end;
end;
☆☆☆ かわいいコードにゃ旅をさせよう いざサンプル蔵へ!! ☆☆☆
00/05/21(日) 11:23 凛(MXB01744)
Original document by 凛 氏 ID:(MXB01744)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|