Forms 在单显示器和多显示器系统上放置窗体和对话框的最佳做法是什么?

Forms 在单显示器和多显示器系统上放置窗体和对话框的最佳做法是什么?,forms,user-interface,dialog,position,monitor,Forms,User Interface,Dialog,Position,Monitor,我正在整理我的(Delphi)应用程序,我访问了浮动表单大小和位置持久性,这对于大屏幕不动产和多显示器来说似乎越来越重要。显然,通常希望在用户关闭表单时在同一位置重新打开表单,但可能并不总是这样,例如,模式对话框可能会证明在用户的视线前打开表单是正确的,即在主监控中心屏幕上。网络上似乎没有什么关于这方面的信息,商业应用程序似乎不一致,尤其是在多个监视器方面。所以,一些(可能相反!)规则让我们开始 非模态形式应始终在闭合的大小和位置重新打开 模式表单(即带有“确定/取消”、“是/否”按钮)应在

我正在整理我的(Delphi)应用程序,我访问了浮动表单大小和位置持久性,这对于大屏幕不动产和多显示器来说似乎越来越重要。显然,通常希望在用户关闭表单时在同一位置重新打开表单,但可能并不总是这样,例如,模式对话框可能会证明在用户的视线前打开表单是正确的,即在主监控中心屏幕上。网络上似乎没有什么关于这方面的信息,商业应用程序似乎不一致,尤其是在多个监视器方面。所以,一些(可能相反!)规则让我们开始

  • 非模态形式应始终在闭合的大小和位置重新打开
  • 模式表单(即带有“确定/取消”、“是/否”按钮)应在 以前的大小(如果相当大),但位于应用程序所在的监视器的中心
  • 应在应用程序所在监视器的中心打开一个信息消息框
  • 应在主监视器的中心打开警告或错误对话框
提前感谢,, Brian

“非模态表单应始终在关闭的大小和位置重新打开。”

它们必须在首次打开时具有默认位置和大小。你有 有什么规定吗

我将添加限定符:如果屏幕分辨率/监视器计数为 与上次打开此窗体时不同,它将恢复为默认值 位置。因此,没有不可访问的表单在右侧和下方恢复了400像素 屏幕区域

“应在主监视器的中心打开一个警告或错误对话框。”

我不明白你为什么要将messagebox从“应用程序所在的监视器”移动 驻留(此后为MWTAR)到主监视器。你知道投注者是 看着MWTAR;毕竟他刚刚做了件“坏事”。为什么 更换显示器现在你有重要的话要说

(毕竟,如果这是一个包含有用诊断的错误对话框,他不会这么做 不管怎样,还是读吧。我看不出有必要对他隐瞒。)

进一步的思考。错误模式对话框的一个问题是,无论它们出现在哪里,用户都可能在键入其他内容时意外地点击“回车”并将其关闭。我知道我经常这样做

我见过克服这个问题的一个技巧是在对话框第一次显示时禁用Ok按钮。对话框中有一个3秒钟的计时器,它会倒计时,在按钮上的小标签上显示剩余时间。因此,赌徒知道他很快就可以放弃这件事


显然,这必须非常、非常谨慎地使用,而且只能用于最罕见和最重要的对话。但我觉得这很聪明。可能需要做的只是在三秒后将Ok设置为默认按钮。

根据平台的不同,当应用程序在发出警报时没有焦点时,应该避免聚焦。对于键入的用户来说,在没有任何机会阅读的情况下关闭警报太容易了


例如,在Windows上,利用任务栏按钮的闪烁功能。

显示器中央的对话框应永远不会打开。考虑30者中的一个“分辨率为2560 x 1600像素的显示器-在其中一个显示器上使用最大化的应用程序只有在非常特定的情况下才有意义。如果应用程序表单位于巨大屏幕区域的某个角落,则用户需要将鼠标光标从其当前位置移动到屏幕中心,然后在关闭对话框后返回。此外,在正常的视距下,可能不可能同时看到所有屏幕,因此活动窗口的中心将比屏幕中心更“在用户的视线之前”。任何不记得其位置的对话框都应以其父窗口为中心打开。对于比其父窗口大的对话框(在该窗口中,让父窗口的一部分可见是有意义的,这会让用户更清楚地看到正在发生的事情),以及应该出现在其应用对象附近的属性页,应该有例外

我也会考虑以屏幕面积的百分比而不是像素来保存屏幕位置。通过这种方式,使用带有或不带有大外部屏幕的笔记本电脑将始终能够最佳利用屏幕区域-使用绝对坐标将使屏幕部分未使用,或将窗口移到可见区域之外