gpt4 book ai didi

windows - 如何获取窗口原始大小和位置(wsNormal vs wsMaximized)

转载 作者:可可西里 更新时间:2023-11-01 13:29:15 25 4
gpt4 key购买 nike

我希望存储用户个性化的窗口大小和位置,以便在重新打开应用程序时使用它。这实际上非常简单,我可以使用以下代码:

创建时:

Width := wIni.ReadInteger('FORM', 'FORMW', 980);
Height := wIni.ReadInteger('FORM', 'FORMH', 500);
PnlXMLI.Width := wIni.ReadInteger('FORM', 'PNLXMLIW', 500);
WindowState := TWindowState(GetEnumValue(TypeInfo(TWindowState), wIni.ReadString('FORM', 'WINDOWSTATE', 'wsNormal')));

OnDestroy:

wIni.WriteInteger('FORM', 'FORMW', Width);
wIni.WriteInteger('FORM', 'FORMH', Height);
wIni.WriteInteger('FORM', 'PNLXMLIW', PnlXMLI.Width);
wIni.WriteString('FORM', 'WINDOWSTATE', GetEnumName(TypeInfo(TWindowState), Ord(WindowState)));

问题是当用户最大化窗口然后恢复它时,它又回到最大化之前的大小。但是如果他最大化,然后关闭并重新打开应用程序并恢复它,应用程序将不会恢复到最大化之前的原始大小。它将以屏幕大小显示,因为 Width 和 Height 属性在读取时给出了最大化的大小。

问题是:如何获得窗口的原始大小,即当用户恢复窗口时它将返回的大小?我尝试在读取宽度和高度之前将 WindowState 设置为 wsNormal,但它不起作用(可能是因为表单被破坏了?)...我宁愿使用不执行不必要的 GUI 操作的解决方案(出于源代码美学原因)。

提前致谢。

最佳答案

你需要的函数是GetWindowPlacementSetWindowPlacement .这些在 WINDOWPLACEMENT 上运行结构。该结构具有 rcNormalPosition 成员,记录如下:

The window's coordinates when the window is in the restored position.

当您保存窗口位置和大小时,您需要保存在 rcNormalPosition 中找到的值。相反,当恢复窗口位置和大小时,您必须调用 SetWindowPlacement 传递作为 rcNormalPosition 的值,该值存储在 INI 文件的用户首选项中。

关于windows - 如何获取窗口原始大小和位置(wsNormal vs wsMaximized),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com