加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Delphi TForm上保存最大化和表单大小

发布时间:2020-12-15 04:15:21 所属栏目:大数据 来源:网络整理
导读:这个问题似乎很容易,但由于某种原因,我很难找到答案. 我有一个应用程序将表单的大小和位置保存在INI文件中.这一切都很好,但是当你在最大化时关闭应用程序时,它将保存表单的大小和位置最大化而不是其状态. 我的意思是,在下一次运行时,表单会显示最大化,而实际
这个问题似乎很容易,但由于某种原因,我很难找到答案.

我有一个应用程序将表单的大小和位置保存在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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读