delphi 获取和监视Caps Lock状态  
官方Delphi 学习QQ群: 682628230(三千人)\n
频道

delphi 获取和监视Caps Lock状态


获取和监视Caps Lock状态

如何在应用程序中显示CAPS LOCK键的当前状态?


有几种解决方法,我以前见过的一种方法是检查KeyPress事件,并根据每次按CapsLock键修改状态。这种方法的问题在于,在应用程序启动时,它不会为您提供必要的状态。因此,我们必须动手以获取理想的解决方案,并深入研究Windows API。幸运的是,代码非常简单。


我们使用GetKeyState函数,将CapsLock键常量传递给它,并接收返回值。如果返回值为零,则CapsLock处于关闭状态,否则处于打开状态。然后,将简单的代码放入按钮单击事件中:


procedure TForm1.Button1Click(Sender: TObject); 

begin 

   if GetKeyState(VK_CAPITAL) > 0 then 

     Label1.Caption := 'Caps Lock On'

   else 

     Label1.Caption := 'Caps Lock Off'; 

end; 

自然,可以很容易地将其修改为可用函数以返回该值,以便多个例程可以使用它,并避免代码重复。首先,对其进行修改以返回整数状态:


function GetCapsLockStatus: Integer; 

begin 

   Result := GetKeyState(VK_CAPITAL); 

end; 


您可以在任何需要的地方调用它,并且一种可能的用途将达到与原始代码相同的效果:


procedure TForm1.Button1Click(Sender: TObject); 

begin 

   if GetCapsLockStatus > 0 then 

     Label1.Caption := 'Caps Lock On' 

   else 

     Label1.Caption := 'Caps Lock Off'; 

end; 

您还可以将其转换为返回字符串的函数:


function GetCapsLockStatusString: Integer; 

begin 

   if GetCapsLockStatus > 0 then 

     Result := 'On' 

   else 

     Result := 'Off'; 

end; 

使用此方法很简单,将结果字符串直接分配给标签标题:

procedure TForm1.Button2Click(Sender: TObject); 

begin 

   Label1.Caption := GetCapsLockStatusString; 

end; 


拥有原始状态后,您可以监视CapsLock键的按键操作(检查虚拟键常量VK_CAPITAL)并适当地更改标题,或者只是将调用插入到常规调用的例程中。请注意,将函数调用插入OnKeyPress事件中是可行的,但是会因函数运行和每次按下任何键而重写标签而导致性能下降。


然后,我们开始-简单但有效地使用Windows API以获得所需的结果。



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.054889917373657 seconds