私は Delphi で次の問題を抱えています (ただし、一般的なプログラミングの質問として受け取られる可能性があります)。
A+DまたはD+FまたはD+ F+のようなショートカットなど、複数の非修飾キーの組み合わせのキープレスイベントを何らかの方法で処理したいと思いますG。
CTRL+DまたはCTRL+ ALT+DまたはALT+などの修飾キーを使用してショートカットを処理する方法は知ってDいますが、非修飾キーの組み合わせを検出するにはどうすればよいですか?
私は Delphi で次の問題を抱えています (ただし、一般的なプログラミングの質問として受け取られる可能性があります)。
A+DまたはD+FまたはD+ F+のようなショートカットなど、複数の非修飾キーの組み合わせのキープレスイベントを何らかの方法で処理したいと思いますG。
CTRL+DまたはCTRL+ ALT+DまたはALT+などの修飾キーを使用してショートカットを処理する方法は知ってDいますが、非修飾キーの組み合わせを検出するにはどうすればよいですか?
個々のキーストロークは、個別の、、、およびイベントを生成OnKeyDown
しOnKeyPress
ますOnKeyUp
。したがって、3つの選択肢があります。
現在押されている各キーを追跡します。受け取ったキーごとに、イベントでそのキーのフラグを設定OnKeyDown
し、対応するイベントでそのフラグをクリアしOnKeyUp
ます。OnKeyDown
のイベントを取得したら、、、、などのフラグDがすでに設定されているかどうかを確認します。およびイベントは、、、、およびキーの状態も通知します。AFGOnKeyDown
OnKeyUp
CTRLALTSHIFT
Win32APIまたは関数GetKeyboardState()
を使用します。のイベントを取得したら、、、、、などが現在保留されているかどうかをOSに確認します。GetKeyState()
GetAsyncKeyState()
OnKeyDown
DAFGCTRL
一部のシーケンスではRegisterHotKey()
、OSにキーを追跡させるために使用する場合があります。登録されたシーケンスが検出されると、WM_HOTKEY
メッセージが表示されます。