【问题标题】:How to tell what device triggered a particular event in Delphi?如何判断什么设备触发了 Delphi 中的特定事件?
【发布时间】:2012-01-27 18:00:24
【问题描述】:

我想知道是否有一种简单的方法可以判断哪个输入设备触发了特定的 GUI 事件。

例如:TButton.OnClick 事件被触发。用户是通过键盘按下触发它(快捷键、Enter 键用于默认按钮、space 键用于聚焦按钮等)还是通过鼠标单击触发?有什么简单的方法可以分辨吗?

我想知道的原因是,当用户使用鼠标启动也可以使用键盘完成的操作时,我可以在我们的一些应用程序中实现键盘使用提示。我们在车间的系统处于非常多尘/肮脏的环境中,老鼠在其中往往不能很好地支撑。此外,在许多情况下,鼠标的使用空间根本就没有那么大。 (不,没有数字小键盘的键盘不是解决方案。它们过于依赖。)

但是,由于我们的应用程序在 Windows 中运行,因此用户倾向于像在家中一样简单地使用这些程序 - 使用鼠标。这并没有什么特别的问题,但我们一直在努力优化输入工作流程,使其也对键盘友好。如果有一种低影响的方式可以向我们的用户表明有一种方法可以让他们做他们正在做的事情而无需抓住鼠标,那就太好了。

【问题讨论】:

  • 为什么不使用标准方式来指示键盘访问?
  • @DavidHeffernan:比如?我尽可能使用标准键盘快捷键,使用默认按钮,使用TAction(或后代)尽可能多地支持我的 UI 操作。但是,我只有这么多的屏幕空间,我无法将其专门用于在整个 UI 中添加快捷方式信息。当用户单击“添加项目”按钮时,我希望能够在屏幕上显示提示:“您也可以按 Insert 添加项目。”
  • 在提示中显示快捷方式。 VCL 为您做到这一点。使用加速键。让用户自己发现。不要强迫他们。
  • @DavidHeffernan:加速器是可用的,但请记住它们在 Windows 中默认是隐藏的。我正在考虑使用提示式弹出窗口——我不想干扰他们正在做的事情,但确实想暂时引起他们的注意。目标是让键盘的使用更容易被发现而不令人讨厌。标准提示不起作用,因为用户在单击我观察到的某些内容后倾向于将鼠标指针移开(诚然,这是轶事而不是严格),或者他们正在将鼠标指针移动到下一个目标。

标签: delphi input-devices


【解决方案1】:

无法从OnClick 中分辨出来。但是,您也可以将事件附加到将在鼠标悬停时触发的控件,这可能更适合您尝试执行的操作。查看OnMouseEnterOnMouseLeave 事件。此外,如果您确实希望在单击鼠标时发生特定的事情,您可以将其附加到 OnMouseUp

【讨论】:

  • ...和/或OnMouseDown。听起来很合理!
  • @Andriy: 从一致性的角度来看,OnMouseDown 并不是一个好主意。用户习惯于在您单击并释放控件时发生“点击”。
  • 完全同意,OnMouseUp 在这方面绝对是一个更好的选择。但我的意思是OnMouseDown 作为OnMouseUp 的替代品(或者,也许是补充),用于记录使用鼠标的频率。主要操作仍将由OnClick 处理,这也是我认为您的意思。当然,我的假设可能很容易出错,如果造成任何混乱,我很抱歉!
  • 看来我得使用一些OnMouse(Enter|Leave|Up) 的工作才能弄清楚。我想一方面,在特定于输入设备的事件处理程序中执行这种特定于输入设备的工作是有意义的(特别是因为大多数可视组件可能指向相同的事件处理程序),我只是想保持我的所有代码都与该操作的实现中可用的特定操作相关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多