我的程序为:
      在onkeydown事件下
    if(key=VK_ESCAPE) then
     begin
     application.messagebox(' 键盘响应测试','',MB_OK);
     end;但这样只能用于escape键,如果要换成数字键列如,0,1.....怎么做呢??
   请指点

解决方案 »

  1.   

    举个例子
         if(key=#50) then
         begin
          application.messagebox(' 键盘响应测试','',MB_OK);
         end;
    就表示如果按下数字键2就弹出消息框
    48-57是0-9的ascii码值
      

  2.   

    不过说明一点key要是char型的,在keypress事件中
    如果你不明白,就在qq里说吧
    我的oicq:18830213
      

  3.   

    例子
    procedure TForm1.Button1KeyPress(Sender: TObject; var Key: Char);
    begin
    if key=#50 then
    showmessage('a');
    end;
      

  4.   

    这里的Key是键值,VK_ESCAPE是个Windows单元定义的常量和而不存在该键的常量定义,只能用数字49表示!只有特殊键才有键盘值的场量定义!从0-9的键值等于其ASCII码,A-Z等于其大写字母的ASCII码!所以OnKeyDown中的Key值是数字!上面加#是错误了!#49表示的是字符'1'!相当于Chr(49),Char(49)!OnKeyPress中取的是字符,也就是相应消息WM_CHAR,Key值就是字符(Char)类型!而特殊键和ASCII字符无关,他们只有键值!
      

  5.   

    这里的Key是键值,VK_ESCAPE是个Windows单元定义的常量!而键1不存在常量定义,只能用数字49表示!只有特殊键才有键值的场量定义!从0-9的键值等于其ASCII码,A-Z等于其大写字母的ASCII码!OnKeyDown中的Key值是数字!上面加#是错误了!#49表示的是字符'1'!相当于Chr(49),Char(49)!OnKeyPress中取的是字符,也就是响应消息WM_CHAR,这时Key值是字符(Char)类型!而特殊键和ASCII字符无关,他们只有键值!
      

  6.   

    OnKeyPress上加上代码:每个键对应其Ascii码,如1的键值为#49,if (key  in [键值]) then
    begin
      application.messagebox(' 键盘响应测试','',MB_OK);
    end;
      

  7.   

    #49表示的是字符'1',不是键值!OnKeyPress相应的是WM_CHAR,取得是字符,也不是键值!键不存在有ASCII码,有ASCII码是字符和控制符!键只有键值!有几种键值和ASCII码相同的情况,上面已经说明了!in一般用于集合,这里key为确定的值,这里不是集合,用in导致多执行一条指令,降低运行效率,有画蛇添足之嫌!