这个问题似乎很容易,但由于某种原因,我很难找到答案.
我有一个应用程序将表单的大小和位置保存在INI文件中.这一切都很好,但是当你在最大化时关闭应用程序时,它将保存表单的大小和位置最大化而不是其状态.
我的意思是,在下一次运行时,表单会显示最大化,而实际上它是“已恢复”但覆盖整个桌面.
有没有办法保存最大化事件之前的表单大小,然后保存表单最大化的事实.从INI文件读取的内容创建了一个最大化状态的表单,并将其“恢复”大小设置为最大化事件之前的大小?
谢谢!
解决方法
使用
Windows API函数
GetWindowPlacement(),如下所示:
procedure TForm1.WriteSettings(AUserSettings: TIniFile); var Wp: TWindowPlacement; begin Assert(AUserSettings <> nil); if HandleAllocated then begin // The address of Wp should be used when function is called Wp.length := SizeOf(TWindowPlacement); GetWindowPlacement(Handle,@Wp); AUserSettings.WriteInteger(SektionMainForm,KeyFormLeft,Wp.rcNormalPosition.Left); AUserSettings.WriteInteger(SektionMainForm,KeyFormTop,Wp.rcNormalPosition.Top); AUserSettings.WriteInteger(SektionMainForm,KeyFormWidth,Wp.rcNormalPosition.Right - Wp.rcNormalPosition.Left); AUserSettings.WriteInteger(SektionMainForm,KeyFormHeight,Wp.rcNormalPosition.Bottom - Wp.rcNormalPosition.Top); AUserSettings.WriteBool(SektionMainForm,KeyFormMaximized,WindowState = wsMaximized); end; end;