私はDelphiを使用しています。どのキーが押されたかを追跡したい。TFormのKeyDownイベントを使用しています。正常に動作していますが、問題は、小文字を押すと、その文字の大文字が表示されるのに、ということです。押されたキーが小文字または大文字であることをどのように認識できますか?
1 に答える
英数字キーを追跡する場合は、を使用する必要がありますKeyPress
。これを試して:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
ShowMessage(Key);
end;
問題KeyDown
は、キーが押されたことに反応することです。確かに、キーボードで「K」または「k」のいずれかを入力したい場合は、同じボタンを押しますよね?したがって、に固執するKeyDown
場合は、Caps Lockキーがオンになっているかどうか、またはShiftキーが押されているかどうかを個別に確認する必要があります。トグルキー(Caps Lockなど)がオンになっているかどうか、または通常のキーが押されているかどうかをテストするには、次を使用できます。
function IsKeyDown(const VK: integer): boolean;
begin
IsKeyDown := GetKeyState(VK) and $8000 <> 0;
end;
function IsKeyOn(const VK: Integer): boolean;
begin
IsKeyOn := GetKeyState(VK) and 1 = 1;
end;
Caps Lockキーがオンになっているかどうかを確認するには、を使用しますIsKeyOn(VK_CAPITAL)
。Shiftキーが押されているかどうかを確認するには、を使用しますIsKeyDown(VK_SHIFT)
。
シフトキーが押されているかどうかを確認する別の方法は、イベントハンドラーでのみ機能し、がイベントハンドラー関数のパラメーターであるかOnKeyDown
どうかを確認することです。ssShift in Shift
Shift
(ちなみに、Caps Lockがオンになっている動作はShiftキーによって打ち消されるため(つまり、CapsLockがオンのときにShift+ Aを押すと、小さな「a」が挿入されます)、テスト時に使用するチェック首都の場合は
IsKeyOn(VK_CAPITAL) xor IsKeyDown(VK_SHIFT)
xor演算子を使用します。)