A
apacheii
Unregistered / Unconfirmed
GUEST, unregistred user!
关于如何保存窗口位置和大小到注册表中,网上文章到处都是,我现在摸索出一个方法,和大家共享(其实微软绑在系统上的一些程序也是用这种方法的):
uses Registry;
procedure TForm1.FormCreate(Sender: TObject);
var
WinPos:TWindowPlacement;
{ //这是一个保存窗口状态的结构,Windows.pas中定义如下
tagWINDOWPLACEMENT = packed record
length: UINT;
flags: UINT;
showCmd: UINT;
ptMinPosition: TPoint;
ptMaxPosition: TPoint;
rcNormalPosition: TRect;
end;
TWindowPlacement = tagWINDOWPLACEMENT;
}
Reg:Tregistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.OpenKey('Software/MyDelphiApp',true);
//从注册表中读出以前保存的二进制数据,如果是第一次使用,窗口
//会按设计时的位置显示:
Reg.ReadBinaryData('WinPOS',WinPos,SizeOf(TWindowPlacement));
Reg.CloseKey;
finally
Reg.Free;
end;
//使用SetWindowPlacement函数根据读出的二进制数据设置窗口状态。
SetWindowPlacement(Handle,@WinPos);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
WinPos:TWindowPlacement;
Reg:Tregistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.OpenKey('Software/MyDelphiApp',true);
//先使用GetWindowPlacement将当前状态保存到结构TWindowPlacement中。
GetWindowPlacement(Handle,@WinPos);
//然后将TWindowPlacement结构以二进制数据方式写入注册表。
Reg.WriteBinaryData('WinPOS',WinPos,SizeOf(TWindowPlacement));
Reg.CloseKey;
finally
Reg.Free;
end;
end;
如果不想保存到注册表,可以把TWindowPlacement以二进制数据方式写到文件中。
也可以把TWindowPlacement的各项下属成员的值写到INI文件里。窗口创建的时候再读出来赋值给TWindowPlacement的各个下属成员。
uses Registry;
procedure TForm1.FormCreate(Sender: TObject);
var
WinPos:TWindowPlacement;
{ //这是一个保存窗口状态的结构,Windows.pas中定义如下
tagWINDOWPLACEMENT = packed record
length: UINT;
flags: UINT;
showCmd: UINT;
ptMinPosition: TPoint;
ptMaxPosition: TPoint;
rcNormalPosition: TRect;
end;
TWindowPlacement = tagWINDOWPLACEMENT;
}
Reg:Tregistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.OpenKey('Software/MyDelphiApp',true);
//从注册表中读出以前保存的二进制数据,如果是第一次使用,窗口
//会按设计时的位置显示:
Reg.ReadBinaryData('WinPOS',WinPos,SizeOf(TWindowPlacement));
Reg.CloseKey;
finally
Reg.Free;
end;
//使用SetWindowPlacement函数根据读出的二进制数据设置窗口状态。
SetWindowPlacement(Handle,@WinPos);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
WinPos:TWindowPlacement;
Reg:Tregistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.OpenKey('Software/MyDelphiApp',true);
//先使用GetWindowPlacement将当前状态保存到结构TWindowPlacement中。
GetWindowPlacement(Handle,@WinPos);
//然后将TWindowPlacement结构以二进制数据方式写入注册表。
Reg.WriteBinaryData('WinPOS',WinPos,SizeOf(TWindowPlacement));
Reg.CloseKey;
finally
Reg.Free;
end;
end;
如果不想保存到注册表,可以把TWindowPlacement以二进制数据方式写到文件中。
也可以把TWindowPlacement的各项下属成员的值写到INI文件里。窗口创建的时候再读出来赋值给TWindowPlacement的各个下属成员。