在多监视器环境中,我希望能够在关闭表单时获取当前监视器和活动监视器以保存信息,并在以后重新打开表单时,表单将显示在它显示的最后一个地方。
当显示表单时,我会进行所有检查(如果监视器编号-i-存在等等),如果一切正常,我会在右侧监视器上显示该表单(i)
Form1.BoundsRect := Screen.Monitors[i].BoundsRect;
我希望能够在Form1.onCloseQuery事件中显示当前监视器显示的表单和活动监视器,这样我就可以在一些Ini,DB中保存该信息,无论如何,但似乎我找不到合适的方法做得好。
有什么想法吗?
答案 0 :(得分:7)
如果您希望保存表单的位置,可以在屏幕坐标中执行此操作。在TForm.BoundsRect
中保存信息,为您提供屏幕相对坐标。请注意,屏幕相对坐标包含连接到屏幕的所有监视器。
换句话说,您实际上并不需要担心表单所在的监视器。例如,假设您有两台并排的800x600显示器。屏幕坐标为:
在您首次展示时,您可以检查表单是否在屏幕范围内。也许当你记得它的位置时,它就在显示器上,后来被移除了。或者,用户可能已重新配置其监视器,以使之前的屏幕坐标无效。
要回答您提出的问题,请使用表单的Monitor
属性找到与表单关联的监视器。这是通过调用传递MONITOR_DEFAULTTONEAREST
的Win32 API函数MonitorFromWindow
来实现的。