在多屏系统上,我希望我的一些应用程序能够记住它们上次在哪个屏幕上运行并再次在同一屏幕上运行。
如何确定当前屏幕/显示器是什么,同时记住屏幕可能具有不同的分辨率?这些程序是用 Delphi 2007 编写的。
最佳答案
VCL 公开此信息,例如通过表单的 Monitor
属性(property)。这是类型 TMonitor
它公开了监视器的各种属性:它的编号、它是否是主监视器、它的边界和工作区域等等。
不过,您要做的只是将表单恢复到之前运行的位置。我认为您不需要记住监视器信息。只需执行以下操作:
- 当应用程序关闭时记住它的边界矩形。
- 当应用程序启动时,将其 bounds rect 设置为已记住的值。
- 检查表单是否包含在屏幕的矩形边界内。如果表单不在屏幕上,则可能是用户移除了显示器或以其他方式重新排列了他们的屏幕。将表单移到最近的监视器或主监视器上。
- 如果窗口可以最大化,则需要额外的细微差别。在这种情况下,请记住 bounds rect 以及应用程序是否最大化。您的 friend 是
GetWindowPlacement
和SetWindowPlacement
。
关于windows - 我如何确定应用程序在哪个屏幕/监视器上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31107157/