如何确定运行应用程序的屏幕/监视器?

Roh*_*pta 0 windows delphi delphi-2007 multiscreen

在多屏幕系统上,我希望我的一些应用程序能够记住它们最后运行的屏幕并再次在同一屏幕上运行.

如何确定当前屏幕/显示器是什么,请记住屏幕可能具有不同的分辨率?这些程序是用Delphi 2007编写的.

Dav*_*nan 6

VCL公开此信息,例如通过表单的Monitor属性.这种类型TMonitor暴露了监视器的各种属性:它的编号,无论是主监视器,它的边界和工作区等等.

您尝试做的只是将表单恢复到以前运行的位置.我认为您不需要记住监视器信息.只需执行以下操作:

  1. 当应用程序关闭时,请记住其边界rect.
  2. 应用程序启动时,将其bounds rect设置为记住的值.
  3. 检查表单是否包含在屏幕的界限rect中.如果表单在屏幕外,则用户可能已移除监视器或以其他方式重新排列其屏幕.将表单移动到最近的监视器或主监视器上.
  4. 如果窗口可以最大化,则需要额外的细微差别.在这种情况下,记住边界矩形以及应用程序是否最大化.您的这个朋友是GetWindowPlacementSetWindowPlacement.