Windows出现在屏幕边缘(Delphi)

时间:2010-07-01 19:08:00

标签: delphi screen location edge turbopower

我的应用程序中的Windows正在弹出屏幕边缘,这当然是一个问题,因为有些窗口是模态的,不能被解雇(你甚至不知道它们在那里)。 / p>

我正在使用TurboPower Orpheus组件来记住每个表单的位置和大小,然后在再次显示表单时恢复它。它将大小和位置保存在INI文件中。

我该怎么做才能防止窗户出现在屏幕的一侧?

3 个答案:

答案 0 :(得分:9)

如果您使用多个显示器然后断开连接,例如取消对笔记本电脑的连接时,会发生这种情况。或者,如果您将笔记本电脑停靠在具有更高分辨率的屏幕上。或者使用远程桌面等。 解决方法是通过健全性检查覆盖“记住我的位置”行为,看看左边+宽度是否超​​过屏幕宽度(Screen.Monitors数组,实际上 - 谢谢你们),反之亦然顶部+高度。

理想情况下,你通过减去差异来“碰撞”,这样你就可以抵挡窗口想要跨越的边缘。

另外,看看Orpheus是否有更新可以解决这个问题。如果没有,您可以获取源,进行更正(可选),并将其贡献给项目。我记得这是OSS。

答案 1 :(得分:2)

您可能需要查看他们的DefaultMonitor媒体资源并阅读TCustomForm.SetWindowToMonitor中的代码,了解如何处理相对于Screen.Monitors的定位。

Use DefaultMonitor to associate a form with a particular monitor in a multi-monitor application. The following table lists the possible values: 

Value        Meaning  
dmDesktop    No attempt is made to position the form on a specific monitor.   
dmPrimary    The form is positioned on the first monitor listed in the global screen object's Monitors property.   
dmMainForm   The form appears on the same monitor as the application's main form.   
dmActiveForm The form appears on the same monitor as the currently active form.   

Note: DefaultMonitor has no effect if the application does not have a main form.

答案 2 :(得分:1)

要调出表单的先前位置,而不是突然出现在一个不再可用的区域(由于屏幕关闭或分辨率已更改),您只需调用

TForm.MakeFullyVisible;

那就是它。请参阅documentation