在多屏幕系统上,我希望我的一些应用程序能够记住它们上次运行的屏幕并再次在同一屏幕上运行。
如何确定当前屏幕/显示器是什么,请记住屏幕可能具有不同的分辨率?这些程序是用Delphi 2007编写的。
答案 0 :(得分:6)
VCL公开此信息,例如通过表单Monitor
属性。这是类型TMonitor
,它公开了监视器的各种属性:它的编号,它是主监视器,它的边界和工作区等等。
您尝试做的只是将表单恢复到之前运行的位置。我不认为你需要记住监控信息。只需执行以下操作:
GetWindowPlacement
和SetWindowPlacement
。 答案 1 :(得分:3)
您可以使用Screen.MonitorFromWindow
方法获取任何表单的当前监视器,这将返回TMonitor
类,其中包含您需要的所有信息。
uses
MultiMon;
...
...
...
var
LMonitor : TMonitor;
LMonitorInfo : TMonitorInfoEx;
begin
ZeroMemory(@LMonitorInfo, SizeOf(LMonitorInfo));
LMonitorInfo.cbSize := SizeOf(LMonitorInfo);
LMonitor:=Screen.MonitorFromWindow(Self.Handle); //pass the handle of the form
if not GetMonitorInfo(LMonitor.Handle, @LMonitorInfo) then
RaiseLastOSError;
ShowMessage(Format('The form is in the monitor Index %d - %s', [LMonitor.MonitorNum, LMonitorInfo.szDevice]));
end;
答案 2 :(得分:0)
目前我在家只有两个相同分辨率的屏幕。看看在我有4个屏幕的工作中会发生什么会很有趣,其中1个屏幕具有不同的分辨率。如果这不起作用,那么我可能也必须查看监视器信息。如果有人想知道为什么分辨率不同,第4个就是投影机。