如题,想做类似于WINDOWS XP那种密码提示框。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      vKeyBoardState: TKeyBoardState;
    begin
      GetKeyboardState(vKeyBoardState);
      CheckBox1.Checked := vKeyBoardState[VK_CAPITAL] = 1;
    end;
      

  2.   

    晕,感谢之余还想知道,这些知识究竟是自己试验出来的还是从书本看来的?
    我怎么也想不到还有TKEYBOARDSTATE这样的类型存在!
      

  3.   

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