我正在与德尔福合作。我想跟踪按下了哪个键。我正在使用 TForm 的 KeyDown 事件。它工作正常,但问题是,如果我按小写字母,但它会给出该字母的大写字母。如何识别按下的按键是小写还是大写?
如果您想跟踪字母数字键,那么您应该使用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)
.
检查 Shift 键是否按下的另一种方法,仅适用于OnKeyDown
事件处理程序,用于检查是否ssShift in Shift
, where Shift
是该事件处理函数的参数。
(顺便说一句,因为 Caps Lock 开启的操作会被 Shift 键抵消(也就是说,如果在 Caps Lock 开启时按 Shift+A,则会出现small插入“a”),测试大写字母时使用的检查是
IsKeyOn(VK_CAPITAL) xor IsKeyDown(VK_SHIFT)
使用异或运算符。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)