6

私はDelphiで次のような問題があります(しかし、一般的なプログラミングの質問として扱われるかもしれません)。非修飾キープレスの組み合わせを検出する方法は?

私は + DまたはD + FまたはD + のようなショートカットの例えば、複数の非修飾キーの組み合わせのために何とかキー押下イベントを処理したいと思いますF + G

私はインスタンスのCTRL + DまたはCTRL + ALT + DまたはALT + Dなどの修飾キーでショートカットを処理する方法を知っているが、どのように私は非検出することができます - 修飾キーのプレスの組み合わせ?

+3

いいえ、特定のイベントハンドラはありません。手動でキーシーケンスを追跡する必要があります。 (BTW、叫ばないでください) –

+1

そしてあなたの主題のタグに属する情報を使用しないでください。タグシステムはここではとても使いやすく、助けは必要ありません(特にSHOUTEDの場合)。タグを使う - それが彼らのためだ。 –

+2

申し訳ありません、新しいです! :) –

答えて

8

個々のキーストロークは、個別のOnKeyDown,OnKeyPressおよびOnKeyUpイベントを生成します。したがって、3つの選択肢があります:

  1. 現在保持されている各キーを追跡します。受信する各キーについて、OnKeyDownイベントでフラグを設定し、対応するOnKeyUpイベントでそのフラグをクリアします。あなたはDためOnKeyDownイベントを取得すると、あなたはすでになど、GFをフラグが立てられているかどうかを確認OnKeyDownOnKeyUpイベントはまた、あなたCTRLALTの状態を教えてくれます、およびSHIFTのキーがあります。

  2. Win32 API GetKeyboardState(),GetKeyState()またはGetAsyncKeyState()機能を使用してください。あなたはDためOnKeyDownイベントを取得すると、もしFOSを尋ねるGCTRL、などが現在ダウンして開催されています。

  3. いくつかのシーケンスでは、RegisterHotKey()を使用し、OSがあなたのためにキーを追跡するようにすることができます。登録されたシーケンスが検出されると、WM_HOTKEYというメッセージが届きます。

+0

ありがとう!私はあなたの方法、特にポイント1と2を証明します!ありがとう! –

+0

誰かがマウスを動かしている(ラップトップのタッチパッドを考えると、入力中に何度も叩いてしまいます)、方法1が失敗することがあります。私は#2で失敗する可能性のあるものは認識していません。 –

+0

@LorenPechtel:興味があります。どのように失敗するでしょうか?個々のキーボードイベントはまだ解雇され、それらを追跡することができますか? –

関連する問題