怎样控制caps lock键

rgn 2009-05-24 04:57:09
在数据输入的时候,有edit1,edit2,edit3,datetimepicker1,button1,我想焦点在edit1时程序自动按下caps lock键,焦点在其它控件时取消按下,怎么办?
keybd_event( VK_CAPITAL,$45,KEYEVENTF_EXTENDEDKEY or 0, 0 );
keybd_event( VK_CAPITAL,$45,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
这两句就是简单的按下和取消caps lock键,但是这两句和如何判断焦点在哪个控件上结合起来呢?
(以下的程序第一个在edit1的输入总不能大写,以及离开edit1后不正常甚至死循环)
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
keystates:TKeyboardState;
begin
getkeyboardstate(keystates);
if (form1.ActiveControl.Name='Edit1')and odd(keystates[vk_CAPITAL])=false then
begin
keybd_event( VK_CAPITAL,$45,KEYEVENTF_EXTENDEDKEY or 0, 0 );
keybd_event( VK_CAPITAL,$45,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
end;
if (form1.ActiveControl.Name<>'Edit1')and odd(keystates[vk_CAPITAL]) then
begin
keybd_event( VK_CAPITAL,$45,KEYEVENTF_EXTENDEDKEY or 0, 0 );
keybd_event( VK_CAPITAL,$45,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
end;
end;
...全文
202 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
starluck 2009-05-24
  • 打赏
  • 举报
回复


Var
ks: TkeyBoardState;

GetKeyboardState(ks);
if (ks[VK_CAPITAL] = 1) then
ShowMessage('Caps Lock is on.')
else
ShowMessage('Caps Lock is off.');
end;

sy_100000 2009-05-24
  • 打赏
  • 举报
回复
根本没必要这么做!这样就可以了!

Edit1.CharCase := ecUpperCase!

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧