代码之家  ›  专栏  ›  技术社区  ›  Brian Frost

在单监视器和多监视器系统上放置窗体和对话框的最佳实践是什么?

  •  4
  • Brian Frost  · 技术社区  · 15 年前

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

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

    提前谢谢你, 布瑞恩

    3 回复  |  直到 15 年前
        1
  •  2
  •   willw    15 年前

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

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

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

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

    我不明白你为什么把消息框从“应用程序所在的监视器”移到 驻留在主监视器上(此后为MWTAR)。你知道赌徒是 看看MWTAR;毕竟他做了些“坏事”。你为什么 换显示器现在你有重要的事情要说吗?

    (毕竟,如果是包含有用诊断的错误对话框,他不会 无论如何都要读。我不认为有必要对他隐瞒。)

    再想想。错误模式对话框的一个问题是,无论它们出现在哪里,用户在键入其他内容时可能会意外地按“回车”键并将其取消。我知道我经常这样做。

    我看到的克服这个问题的一个技巧是在对话框第一次显示时禁用OK按钮。对话框中有一个3秒的计时器,它会倒计时,并将剩余时间显示在附加到按钮的小标签中。所以赌徒知道他很快就能把事情处理掉。

    显然,这必须非常、非常谨慎地使用,而且只能用于最稀有和最重要的对话。但我觉得这很聪明。也许需要做的只是在3秒钟后将ok设为默认按钮。

        2
  •  2
  •   mghie    15 年前

    对话应该 从未 在显示器中央打开。考虑一下其中一个分辨率为2560x 1600像素的30英寸显示器-使用这些显示器中的一个最大化的应用程序只在非常特殊的情况下才有意义。如果应用程序窗体位于该大屏幕区域的某个角落,则用户需要将鼠标光标从其当前位置移到屏幕中心,然后在取消对话框后移回。而且,在正常的视距下,可能不可能同时看到所有的屏幕,所以活动窗口的中心将比屏幕中心更“在用户的视线前面”。任何不记得其位置的对话框都应该以其父窗口为中心打开。对于大于其父窗口的对话框(在该窗口中保留一点父窗口可见是有意义的,这会让用户更清楚发生了什么)和应该出现在其应用对象附近的属性页,应该进行例外处理。

    我也会考虑将屏幕位置保存为屏幕面积的百分比,而不是像素。这样,使用带有或不带有大的外部屏幕的笔记本电脑时,总是能最大限度地利用屏幕区域——使用绝对坐标时,屏幕的一部分将被闲置,或者窗口移到可见区域之外。

        3
  •  1
  •   Richard    15 年前

    根据平台的不同,当应用程序在发出警报时没有焦点时,应避免焦点。对于键入内容的用户来说,很容易在没有阅读机会的情况下解除警报。

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