Delphi 如何检测非修改按键组合?
我在Delphi中有以下问题(但它可能被视为一般编程问题) 我希望以某种方式处理多个非修改键组合的按键事件,例如a+D、D+F或D+F+G等快捷键Delphi 如何检测非修改按键组合?,delphi,textbox,keyboard-shortcuts,keyboard-events,onkeypress,Delphi,Textbox,Keyboard Shortcuts,Keyboard Events,Onkeypress,我在Delphi中有以下问题(但它可能被视为一般编程问题) 我希望以某种方式处理多个非修改键组合的按键事件,例如a+D、D+F或D+F+G等快捷键 我知道如何使用修改键(例如CTRL+D或CTRL+ALT+D或ALT+D)处理快捷键,但如何检测非修改键组合?每个单独的按键都会生成单独的OnKeyDown、OnKeyPress和onkeypup事件。所以你有三个选择: 跟踪当前按住的每个关键点。对于收到的每个键,在OnKeyDown事件中为其设置一个标志,并在相应的onkeydup事件中清除该标志
我知道如何使用修改键(例如CTRL+D或CTRL+ALT+D或ALT+D)处理快捷键,但如何检测非修改键组合?每个单独的按键都会生成单独的
OnKeyDown
、OnKeyPress
和onkeypup
事件。所以你有三个选择:
OnKeyDown
事件中为其设置一个标志,并在相应的onkeydup
事件中清除该标志。当您获得D的OnKeyDown
事件时,检查您是否已经标记了A、F、G等。OnKeyDown
和onkeydup
事件还将告诉您CTRL、ALT和SHIFT键的状态GetKeyboardState()
,GetKeyState()
或GetAsyncKeyState()
函数。当您收到D的OnKeyDown
事件时,询问操作系统当前是否按下了A、F、G、CTRL等键RegisterHotKey()
,让操作系统为您跟踪密钥。当检测到注册序列时,您将收到WM\u热键
消息不,没有特定的事件处理程序,您必须手动跟踪密钥序列。(顺便说一句,请不要大声喊叫)也不要在主题中使用标签中的信息。这里的标签系统非常好,不需要帮助(尤其是在叫喊时)。使用标签-这就是它们的用途。非常感谢!我将证明你的方法,特别是第1点和第2点!谢谢如果有人在移动鼠标(想想笔记本电脑的触摸板——很多时候我在打字时不小心碰到了它),方法1可能会失败。“我不知道有什么东西会失败#2。@LorenPechtel:只是感兴趣而已。”。它怎么会失败呢?单个键盘事件仍然会被触发,您可以跟踪它们吗?我想我可以用标志跟踪它们。。但我没有想到Loren的问题,事实上,如果有人移动鼠标,方法#1会失败。@Marjannema:事件会发生,但如果鼠标移动,它们可能不会发生在正在寻找它们的窗口上。