检测Insert、Capslock、NumLock、ScrollLock状态键的状态

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AppEvnts, ComCtrls;

type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    ApplicationEvents1: TApplicationEvents;
    procedure FormResize(Sender: TObject);
    procedure ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormResize(Sender: TObject);
begin
    with StatusBar1 do
    begin
        Panels[0].Width:=Form1.Width - Panels[1].Width -Panels[2].Width-Panels[3].Width -50;
    end;
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
    if GetKeyState(VK_CAPITAL) <> 0 then
      StatusBar1.Panels[1].Text := ‘ CAP‘
    else
      StatusBar1.Panels[1].text:=‘‘;

if GetKeyState(VK_NUMLOCK) <> 0 then
      StatusBar1.Panels[2].Text := ‘ NUM‘
    else
      StatusBar1.Panels[2].Text := ‘‘;

if GetKeyState(VK_SCROLL) <> 0 then
      StatusBar1.Panels[3].Text := ‘ SCRL‘
    else
      StatusBar1.Panels[3].Text := ‘‘;
End;

end.


可以调用Win API的Getkeyboardstate()函数。
    常量        按键名称
VK_INSERTI    nsert键
VK_NUMLOCK    Num Lock键
VK_CAPITAL    Caps Lock键
VK_SCROLL     Scroll Lock键
  键盘缓冲区每一位都有一位特定的格式,对于状态键来说,最低位是1时表示状态键处于ON状态,你可以使用odd()函数来确定这一位的状态,以下是一个简单的例子请参考。例子中放置一个Timer控件、一个StayusBar1状态条。

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Timer1Timer(Sender: TObject);
var ks:tkeyboardstate;
begin
  getkeyboardstate(ks);//检测键盘函数
  if odd(ks[VK_NUMLOCK]) then
    statusbar1.panels.items[0].text:=‘NUM‘
  else
    statusbar1.panels.items[0].text:=‘‘;
  if odd(ks[VK_INSERT]) then
    statusbar1.panels.items[1].text:=‘INSERT‘
  else
    statusbar1.panels.items[1].text:=‘‘;
  if odd(ks[VK_CAPITAL]) then
    statusbar1.panels.items[2].text:=‘CAPITAL‘
  else
    statusbar1.panels.items[2].text:=‘‘ ;
  if odd(ks[VK_SCROLL]) then
    statusbar1.panels.items[3].text:=‘SCROLL‘
  else
    statusbar1.panels.items[3].text:=‘‘;
  end;
end.

来自为知笔记(Wiz)

附件列表

检测Insert、Capslock、NumLock、ScrollLock状态键的状态

时间: 2024-08-12 01:36:29

检测Insert、Capslock、NumLock、ScrollLock状态键的状态的相关文章

在拖放文件的同时检测shift键的状态

老板要给原来文件拖放的功能加个扩展分类,于是想在文件拖放时判断shift键的状态来区分. 一般通过keydown和keyup来判断按下与否,但这都是需要控件事件触发,而在拖放的时候是没法触发key事件的,所以需要通过其他的检测. 百度后,找到了这么一句: 1 if (Control.ModifierKeys == Keys.Shift) //keys Control.ModifierKeys 返回的是当前修改键的状态,ALT,SHIFT,CTRL 2 { 3 shiftDown = true;

精通有状态vs无状态(Stateful vs Stateless)—Immutable模式之姐妹篇

我相信有不少人还不明白有状态和无状态(Stateful and Stateless)的概念,那么我们今天就来谈谈有状态和无状态,一方面不断总结提高自我,另一方面兼扫盲.这是Immutable不变模式的姐妹篇,大家可以参照着读. Immutable不变模式的分析blog: http://www.iteye.com/topic/959751 基本概念: 有状态就是有数据存储功能.有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的.在不同方法调用间不保留任何状

Java深度历险(二) EJB Session Bean有状态和无状态的区别与联系

刚开始对两种sessionbean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息.仔细分析并用实践检验后,会发现,事实恰好相反:有状态和无状态会话bean的本质区别是它们的生命期. 首先解释一个下面要用到的概念--用户:sessionbean 的用户实际上就是直接调用ejb的类的实例,甚至是这个实例的某个方法.同一个类的不同实例对于session bean来说是不同的用户. 实例解析 有状态的StatefulEjb

AIR中用户离开状态和返回状态

通过idleThreshold=10;(秒) USER_IDLE.USER_PRESENT事件 可以对用户离开状态和返回状态进行处理. 例如用户5分钟没有鼠标键盘动作,进入离开状态, 有了鼠标键盘动作就回到在线状态. NativeApplication.nativeApplication.idleThreshold = idleTime; NativeApplication.nativeApplication.addEventListener(Event.USER_IDLE,onIdle); N

http协议无状态中的 &quot;状态&quot; 到底指的是什么?!

引子: 最近在好好了解http,发现对介绍http的第一句话[http协议是无状态的,无连接的]就无法理解:无状态的[状态]到底指的是什么?! 找了很多资料不仅没有发现有一针见血正面回答这个问题的,而且有些解释还充斥了各种错误,看着看着就觉得心里憋着一股浊气吐不出来 于是在看了很多资料之后,我一口吐出浊气,大声正面提出这个问题:http协议无状态中的[状态]到底指的是什么?! 然后开始不断探索解决这个问题... 最终很高兴的是我找到了让人满意的答案,先卖个关子,各位如果着急可以直接拉到最下查看

TCP协议 状态解析和状态统计

一.三次握手和四次挥手 1.建立连接(三次握手) (1)服务器会处于listen状态,客户端发送一个带SYN标志的TCP报文到服务器. (2)服务器端回应客户端的请求,这是三次握手中的第2个报文,这个报文同时带SYN标志和ACK标志. 因此它表示对刚才客户端SYN报文的回应:同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯. (3)客户必须再次回应服务段一个ACK报文,这个时候两端就处于已经建立连接 2.连接终止(四次握手) 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭.这

前端常见状态码 http状态码

HTTP状态码 编辑 HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518.RFC 2817.RFC 2295.RFC 2774.RFC 4918等规范扩展. 中文名 HTTP状态码 外文名 HTTP Status Code 规范定义 RFC 2616 消息端 1字头,2字头,3字头 目录 1 消息(1字头) ? 100 Continue ? 101 Switching Protocols

eigrp的查询和主动状态------active状态和sia状态

查询的步骤: 拓扑结构--A是BCDE的吓一跳路由器,B是CDE的后继路由器. 10.0的路由器现在断开了,A的10.0进入active状态,A会向BCDE发送query,CDE接到查询后,知道A不能够到底10.0的网络,立即把后继路由器B放到路由表中,给A回复replay,A解除对CDE的ACTIVE状态,因为B没有后继路由器,向CDE发送查询,CDE接到查询后,因为CDE都没有后继路由器了,所以向A发送查询,A接到查询后向CDE发送replay,告诉他们自己没有去10.0的查询,CDE重新收

聊聊系统设计:有状态、无状态

网站登录校验,很普通的一个功能 对于这个功能我们要如何实现? 先分析一下登录校验是个啥意思 举个栗子,比如我们在登陆页输入用户名密码,登录了社交网站 这时候想去看自己的新鲜事,却告诉我请先输入用户名密码进行验证.. 这时候想去吐槽下这个2B体验,发个新鲜事,点完发布按钮时,又弹出框说请输入用户名密码进行验证...这时候脑子里上千个草泥马奔腾而过 这样的产品可以说拜拜了 对我们的用户来说,登录操作其实完成一次就够了,后续的操作服务应该能够自动识别出是这个合法用户 因此,我们就需要对用户的状态进行记