How to tell what device triggered a particular event in Delphi?
-
03-12-2019 - |
Frage
I'm wondering if there's an easy way to tell which input device triggered a particular GUI event.
For example: A TButton.OnClick
event gets fired. Did the user trigger it with a keyboard press (shortcut, Enter
key for default button, space
key for a focused button, etc.) or was it triggered with a mouse click? Is there any easy way to tell?
The reason I'd like to know is so that I can implement keyboard usage hints into some of our applications when the user uses the mouse to initiate actions that could also be done with the keyboard. Our systems on the shop floor are in pretty dusty/dirty environments, and mice tend to not hold up so well in them. Also, in many cases, there's simply not that much room for a mouse to be used. (No, keyboards without numeric keypads is not a solution. They're relied on too heavily.)
However, since our apps run in Windows, users tend to simply use the programs like they would at home -- with a mouse. There's nothing particularly wrong with that, but we've worked hard to optimize the input workflow to be keyboard friendly as well. It'd be nice if there was a low-impact way to indicate to our users that there's a way for them to do the things they're doing without having to grab the mouse.
Lösung
There's no way to tell from within OnClick
. However, you can also attach events to a control that will fire when the mouse rolls over it, which would probably be more appropriate for what you're trying to do anyway. Take a look at the OnMouseEnter
and OnMouseLeave
events. Also, if you really want something specific to happen when the mouse is clicked, you can attach it to OnMouseUp
.