Delphi 如何检测非修改按键组合?

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事件中清除该标志

我在Delphi中有以下问题(但它可能被视为一般编程问题)

我希望以某种方式处理多个非修改键组合的按键事件,例如a+D、D+F或D+F+G等快捷键


我知道如何使用修改键(例如CTRL+D或CTRL+ALT+D或ALT+D)处理快捷键,但如何检测非修改键组合?

每个单独的按键都会生成单独的
OnKeyDown
OnKeyPress
onkeypup
事件。所以你有三个选择:

  • 跟踪当前按住的每个关键点。对于收到的每个键,在
    OnKeyDown
    事件中为其设置一个标志,并在相应的
    onkeydup
    事件中清除该标志。当您获得D的
    OnKeyDown
    事件时,检查您是否已经标记了A、F、G等。
    OnKeyDown
    onkeydup
    事件还将告诉您CTRL、ALT和SHIFT键的状态

  • 使用Win32 API
    GetKeyboardState()
    GetKeyState()
    GetAsyncKeyState()
    函数。当您收到D的
    OnKeyDown
    事件时,询问操作系统当前是否按下了A、F、G、CTRL等键

  • 对于某些序列,您可以使用
    RegisterHotKey()
    ,让操作系统为您跟踪密钥。当检测到注册序列时,您将收到
    WM\u热键
    消息


  • 不,没有特定的事件处理程序,您必须手动跟踪密钥序列。(顺便说一句,请不要大声喊叫)也不要在主题中使用标签中的信息。这里的标签系统非常好,不需要帮助(尤其是在叫喊时)。使用标签-这就是它们的用途。非常感谢!我将证明你的方法,特别是第1点和第2点!谢谢如果有人在移动鼠标(想想笔记本电脑的触摸板——很多时候我在打字时不小心碰到了它),方法1可能会失败。“我不知道有什么东西会失败#2。@LorenPechtel:只是感兴趣而已。”。它怎么会失败呢?单个键盘事件仍然会被触发,您可以跟踪它们吗?我想我可以用标志跟踪它们。。但我没有想到Loren的问题,事实上,如果有人移动鼠标,方法#1会失败。@Marjannema:事件会发生,但如果鼠标移动,它们可能不会发生在正在寻找它们的窗口上。