我刚刚发现大写锁定和shift键(可能还有一些键)会影响连接到计算机的所有键盘。 (测试我编码的程序的危险之一,我只有两只手所以我花了很长时间才意识到这样的问题) 因此分离击键很好,但是移位/大写锁定会让一切都变得疯狂(当一个用户转为大写时,所有用户的输入也会被大写)
我可以在FormKeyPress中捕获Capslock和Shift按键吗?
其他任何地方的事情?
我可以保存Shift键吗? (所以我可以正确地将'shift'应用到相应的用户输入)
欢迎任何其他解决此问题的建议。
答案 0 :(得分:7)
检查换档是否已关闭试试这个:
if GetKeyState(VK_SHIFT)<0 //tests if shiftkey is down
then ShowMessage('shift key is down'');
并检测是否已启用大写锁定尝试此操作:
if Odd(GetKeyState(VK_CAPITAL)) //tests if caps lock is on
then showmessage('caps lock is on');
如果你想检查shift和capslock的状态:
if Odd(GetKeyState(VK_CAPITAL)) then
if GetKeyState(VK_SHIFT)<0 then
showmessage('capslock is on and shift key is down too')
else
showmessage('capslock is on but shift key is NOT down');
getkeystate是一个windows api函数,你可以阅读更多关于它的here
答案 1 :(得分:2)
您可以在OnKeyDown
事件
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_SHIFT then
ShowMessage('Shift Pressed');
if Key = VK_CAPITAL then
ShowMessage('Caps Lock Pressed');
end;
答案 2 :(得分:1)
if Key = VK_SHIFT then
ShowMessage('Shift Pressed');
应该有:
if shift = [ssShift] then ...
程序测试Shift: TShiftState
按住SHIFT键,
不是key :word
;检查其他序数字符
它对CAPSLOCK不起作用 - 我找不到代码。
只有:ssShift
,ssAlt
,ssCtrl
,ssLeft
,ssRight
,ssMiddle
,ssDouble
,所以它似乎有在这种情况下使用:
if Odd(GetKeyState(VK_CAPITAL)) then ...