我的 Delphi-7 应用程序显示:
当我在我的WinXP-Pro PC上运行应用程序时,我进入控制面板/显示器/设置,并更改第二个显示器的设置(添加或删除)。
然后,我单击刷新按钮以显示4(或6)个参数的新值,结果出现了一些意外情况:Screen.DesktopWidth和Screen.DesktopHeight显示正确的新值,但另外2(或4)个参数的值非常错误。
例如,Screen.Monitors[0].Width = 5586935,而实际应该是1680。
在Delphi 7中使用TScreen是否有特殊规定?
Screen.DesktopWidth
Screen.DesktopHeight
Screen.Monitors[0].Width
Screen.Monitors[0].Height
如果有第二个显示器被选中,也会:
Screen.Monitors[1].Width
Screen.Monitors[1].Height
当我在我的WinXP-Pro PC上运行应用程序时,我进入控制面板/显示器/设置,并更改第二个显示器的设置(添加或删除)。
然后,我单击刷新按钮以显示4(或6)个参数的新值,结果出现了一些意外情况:Screen.DesktopWidth和Screen.DesktopHeight显示正确的新值,但另外2(或4)个参数的值非常错误。
例如,Screen.Monitors[0].Width = 5586935,而实际应该是1680。
在Delphi 7中使用TScreen是否有特殊规定?
Screen.GetMonitors
完成的)。我猜当您重新启动应用程序时,会得到正确的值,对吗?如果我记得正确的话,Sertac 可能在某个地方写过,安全地销毁Screen
实例并重新创建它。如果是这样,那么以下操作应该可以刷新这些数据Screen.Free; Screen := TScreen.Create(nil);
,但我真的不知道这个操作有多安全。 - TLamaGetMonitorInfo
)由于不存在实际句柄而失败(并返回随机值)。问题似乎出在监视器列表(TScreen.FMonitors
)上,它被缓存并且不会改变(任何时候?我得看看...)。同时尝试检查Monitor.Width
的值(没有Screen
,只有Monitor.Width
)。顺便说一下,如果由MonitorFromWindow
调用获取的监视器未包含在该列表中,则应更新Screen.Monitors
缓存列表。 - TLama