新しい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)を受け取ります。この迷惑な行動を止める方法はありますか?OnKeyPress
Ctrl + 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-MとENTERしてOnKeyPress
イベント、あなたはどちらかにあります。
使用OnKeyDown/Up
する際のトラック保つためにイベントをCTRL(VK_CONTROL
)とM(VK_M
)仮想キーが時に対押されているENTER(VK_RETURN
)は、仮想キーが押されているが。
GeyKeyState()
またはGetAsyncKeyState()
を使用して、CTRL-Mキーが押されているかどうかと、キーが押されているかどうかを検出ENTERします。
それ以外の場合は、まったく使用しないでくださいOnKeyPress
。OnKeyDown/Up
代わりに使用し、必要に応じて独自のキーストローク処理を行ってください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加