2

私はDelphiを使用しています。どのキーが押されたかを追跡したい。TFormのKeyDownイベントを使用しています。正常に動作していますが、問題は、小文字を押すと、その文字の大文字が表示されるのに、ということです。押されたキーが小文字または大文字であることをどのように認識できますか?

4

1 に答える 1

14

英数字キーを追跡する場合は、を使用する必要があります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 ShiftShift

(ちなみに、Caps Lockがオンになっている動作はShiftキーによって打ち消されるため(つまり、CapsLockがオンのときにShift+ Aを押すと、小さな「a」が挿入されます)、テスト時に使用するチェック首都の場合は

IsKeyOn(VK_CAPITAL) xor IsKeyDown(VK_SHIFT)

xor演算子を使用します。)

于 2010-08-06T09:59:15.337 に答える