【问题标题】:How to make a form blink on error input?如何使表单在​​错误输入时闪烁?
【发布时间】:2012-04-12 23:31:05
【问题描述】:

也许是哔哔声和背景闪烁红色?任何代码sn-p?谢谢

【问题讨论】:

  • 哎呀,三个最烦人的 ui dis-features(哔哔声、闪烁和闪烁)表示错误?!为什么不简单地在输入错误的控件周围加粗边框呢?厚,因为只改变颜色不会帮助色盲的人。
  • 我认为你应该打开 1000 个弹出窗口,而不是随机网页。那会更烦人。 :-)
  • 是的,我可以对一个被否决的问题投赞成票,这让我很高兴。是的,我对此有真正的用途。我正在为聋人编写游戏,并且表单像声纳回声定位器一样闪烁。因此,虽然提问者出于不好的原因想要这个的原因,并没有使它成为一个坏问题。此外,已接受的答案没有回答问题。 叹息

标签: delphi


【解决方案1】:

使表单闪烁是一种非常糟糕的 GUI 设计,您可以尝试以下选项之一:

  • 使用对话消息,例如

_

Application.MessageBox('Your message of error', 'Errror', MB_ABORTRETRYIGNORE + MB_ICONSTOP);
  • 使用代表错误状态的图像(图标)。
  • 使用带有指示错误消息的消息的TStatusBar
  • 在表单中使用带有特殊字体颜色的TLabel(如clred)。

最后,您选择的选项取决于您的应用程序类型和错误类型。

查看此问题以获取更多建议Error Message Text - Best Practices

【讨论】:

  • 虽然对话消息比哔哔、闪烁和闪烁要好得多,但我建议在使用消息框时要克制。对于真正的错误,它们是可以的,但所有这些“你确定”类型的消息只比眨眼、闪烁或哔哔声稍微不那么烦人......
【解决方案2】:

我个人的偏好是:

错误地突出显示(和聚焦)控件,方法是巧妙地更改其背景颜色或使边框加粗,甚至使字段标题加粗。或任何组合。正如 Marjan Venema 所说,请注意色盲的人。

最后,每个表单都有一个可以显示验证错误的区域 - 例如对齐列表框或字符串网格或类似于底部或顶部,并根据 > 0 的错误数切换可见性。您甚至可以允许用户单击网格/列表中的错误以将焦点设置在有问题的字段上。

我的一个应用程序实际上将这些验证错误存储在一个表中,并允许用户查询该列表以在以后解决错误。

弹出对话框,闪烁应该非常谨慎地使用。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    只需在运行时创建第二个具有相同大小和位置的空表单,并在短时间内将其显示为叠加层。您可以使用 alphablending(AlphaBlend 和 AlphaBlendValue 属性,请参阅this article),这样下面的表单仍然可见。

    (这是我在显示模式对话框时用作附加视觉提示的一种技术 - 当然不闪烁)

    【讨论】:

      【解决方案4】:

      我目前正在使用 Jedi Lib 的 JvValidators。您可以找到更多信息 Jedi's Project Portal 可以在Sourceforge Jedi's page上下载

      看看我用它做了什么:Gedean's Error Manager Framework demo

      最好的问候。

      【讨论】:

        【解决方案5】:

        一种可能的解决方案:

        请参考:

        就 Delphis 而言,它们是在 Windows.pas 单元中定义的。

        为您的 FLASHWINFOHWND 结构的 HWND 字段设置正确的句柄。任何带有句柄的 VCL 控件都可以etvoilà

        调整 dwFlags 和 uCount 字段可让您获得预期的行为。

        就您而言,在我看来,闪烁/闪烁整个表单并不是一个好主意。避免过于打扰和/或烦人:为什么不针对发生错误输入的控件或至少是状态栏?


        旁注:

        这是我有时用来通过闪烁提醒用户的 sn-p:

        procedure TForm1.Flash;
        var
          FlashInfo: FLASHWINFO;
        begin
          if (GetForegroundWindow<>Handle) then
          begin
            FillChar(FlashInfo, SizeOf(FLASHWINFO), 0);
            //
            FlashInfo.cbSize := SizeOf(FLASHWINFO);
            FlashInfo.dwFlags := FLASHW_ALL or FLASHW_TIMERNOFG;
            FlashInfo.hwnd := Handle;
            //
            FlashWindowEx(FlashInfo);
          end;
        end;
        

        注意:

        • 当且仅当应用程序的主窗口不在前台时才有效(仅在需要时闪烁!)。
        • 我在模态错误通知之前调用该方法,并且仅在这种情况下。

        【讨论】:

          【解决方案6】:

          即使我不同意这里的“闪烁”窗口/消息,您也有一个小组件示例 http://www.torry.net/vcl/labels/blink/blinklbl.zip

          您可以根据需要调整代码。

          【讨论】:

            【解决方案7】:

            在 Windows 中执行此操作的“正确”方法是使用FlashWindow API,它允许您闪烁窗口边框,如果当前未聚焦,则闪烁任务栏图标。

            【讨论】:

              猜你喜欢
              • 2016-05-09
              • 2014-01-15
              • 1970-01-01
              • 1970-01-01
              • 2023-04-08
              • 1970-01-01
              • 2018-09-14
              • 1970-01-01
              • 2017-07-17
              相关资源
              最近更新 更多