16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"フォームの位置を保存/復元(レジストリ版"
この発言は #01080 凛 さんのフォームの位置を保存/復元 に対するコメントです
レジストリにフォームの位置を保存・復元する場合のサンプルです。Windows
のAPIを使うと、最大化にしても復帰してくれて、最大化前のWindowの大きさも
憶えてくれるので便利です。んなわけで、ガンガン使いたいところですが、多
少問題があります。
まず、バイナリで保存するのでレジストリのみとなります(レコードを展開
すれば、INIでも可能カモ)。
次に複数Formの場合に問題が出ます。メインWindowでサブWindowをShowする
前にサブWindowが表示されてしまいます。それを回避するには、TWindowPlace
mentのshowCmdにSW_HIDEを指定してやります。そうすると、サブWindowは表示
されなくなります。しかし、今度は最大化の状態フラグが消えてしまいます…。
まだまだ研究中であります。(^_^;)
メインWindowの位置・状態だけをレジストリに保存するなら、簡単なんです
が…。使い方はnifty:FDELPHI/MES/16/1080と同じです。
const //レジストリのキー(HKEY_CURRENT_USER 下にできます)
REGKEY = 'Software\CompanyName\SoftwareName';
procedure RecoverWindow(AForm: TForm);
var
Reg: TRegistry;
Placement: TWindowPlacement;
begin
Reg := TRegistry.Create;
try
if Reg.OpenKey(REGKEY, False) then
begin
Reg.ReadBinaryData(AForm.Name, Placement, SizeOf(Placement));
if not AForm.Showing then //サブWindowの表示回避コード
Placement.showCmd := Placement.showCmd and SW_HIDE;
SetWindowPlacement(AForm.Handle, @Placement);
end;
finally
Reg.Free;
end;
end;
procedure SaveWindow(AForm: TForm);
var
Reg: TRegistry;
Placement: TWindowPlacement;
begin
Reg := TRegistry.Create;
try
if Reg.OpenKey(REGKEY, True) then
begin
Placement.Length := SizeOf(Placement);
GetWindowPlacement(AForm.Handle, @Placement);
Reg.WriteBinaryData(AForm.Name, Placement, SizeOf(Placement));
end;
finally
Reg.Free;
end;
end;
00/05/22 (Mon) ぶんぶん鈴木
Original document by ぶんぶん鈴木 氏 ID:(EZA00106)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|