Ctrl +「いくつかのキー」が押されたときに制御文字でOnKeyPressイベントの迷惑な生成を停止する方法はありますか?

マルス・ネブヌ

新しいVCLアプリケーションを開始TEditし、フォームにをドロップして、これをOnKeyPressイベントに割り当てます

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 Caption:=Caption+' '+IntToStr(Ord(Key));
end;

アプリケーションを実行して、たとえばCtrl + MまたはCtrl + Hを押すと、KeyOnKeyPressイベントで制御文字#13(Enter)および#8(Backspace)を受け取りますこの迷惑な行動を止める方法はありますか?OnKeyPressCtrl + Mのようなショートカットを押すと、受信を完全に停止します。Ctrlキーを押しながらテストせず、イベント内で何もしません。Ctrl + MではなくEnterキーが押されたときに、アプリケーションでEnterキーを処理したい。私が言っていることをあなたが理解してくれることを願っています...

レミー・ルボー

OnKeyDown/Upイベント(WM_KEYDOWN/UPメッセージ)が報告して、個々のキーストロークを受け取る仮想キーコードキーボードの物理から翻訳されたスキャンコードキーボードドライバでは。

OnKeyPressイベント(WM_CHARメッセージ)を受信翻訳された文字を仮想キーとキーの組み合わせの後に(彼らはすべての文字に変換されている場合)処理されています。

CTRL-Mされる翻訳されたキャリッジリターン(#13)文字に。

CTRL-Hされる翻訳されたバックスペース(#8)文字に。

この変換は、メッセージループがをTranslateMessage()呼び出す前にキーボードメッセージを関数に渡すときに、OSレイヤーで行われますDispatchMessage()

さまざまなCTRL組み合わせがどのように変換されるかについては、次の表を参照してください

コントロールキー-例

メッセージがメッセージに変換される方法の詳細については、文字メッセージも参照WM_KEYDOWN/UPしてWM_CHARください。

だから、区別するCTRL-MENTERしてOnKeyPressイベント、あなたはどちらかにあります。

  1. 使用OnKeyDown/Upする際のトラック保つためにイベントをCTRLVK_CONTROL)とMVK_M)仮想キーが時に対押されているENTERVK_RETURN)は、仮想キーが押されているが。

  2. GeyKeyState()またはGetAsyncKeyState()使用してCTRL-Mキーが押されているかどうかと、キーが押されているかどうを検出ENTERします。

それ以外の場合は、まったく使用しないでくださいOnKeyPressOnKeyDown/Up代わりに使用し、必要に応じて独自のキーストローク処理を行ってください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ