发新话题
打印

[语言基础/算法] OnKeyDown,OnKeyPress,OnKeyUp事件中的参数Key

OnKeyDown,OnKeyPress,OnKeyUp事件中的参数Key

OnKeyDown和OnKeyUp事件中的Key是Word型的,表示用户按的是键盘上的哪个键,OnKeyPress中的Key是Char型,表示用户输入什么字符。   
   
  两者是有区别的,比如判断用户输入的是否是"%"代码分别如下:   
   
  //OnKeyDown事件(OnKeyUp事件代码相同)   
  procedure   TForm1.FormKeyDown(Sender:   TObject;   var   Key:   Word;   Shift:   TShiftState);   
  begin   
      if   (Key   =   53)   and   (Shift   =   [ssShift])   then   
                            //十进制时不能加"#"号   
                            //or   if   (Key   =   $35)   and   (Shift   =   [ssShift])   then   
                            //键盘上的"%   5"键的值为53(十六进制为$35)   
                            //表示用户按下Shift和5键,即输入"%"   
          showmessage('KeyDown');   
  end;   
   
  //OnKeyPress事件   
  procedure   TForm1.FormKeyPress(Sender:   TObject;   var   Key:   Char);   
  begin   
      if   Key   =   #37   then   
                            //十进制时必须加"#"号   
                            //or   if   Key   =   char($25)   then   
                            //字符"%"的ASC码为37(十六进制为$25)   
          showmessage('KeyPress');   
  end;   
   
   
  各个键的值可在OnKeyDown和OnKeyUp事件中得到:   
  procedure   TForm1.FormKeyDown(Sender:   TObject;   var   Key:   Word;   Shift:   TShiftState);   
  begin   
      showmessage(inttostr(Key));   
  end;   
  得出"<   ,"键的键值为188($BC)   
   
  OnKeyPress事件中可以得到ASC码:   
  procedure   TForm1.FormKeyPress(Sender:   TObject;   var   Key:   Char);   
  begin   
      showmessage(inttostr(ord(Key)));   
  end;   
  得出","的ASC码为#44($2C),"<"的ASC码为#60($3C)。(使用汉字时不要使用该方法,因为汉字一般使用的是Unicode编码,占两个字节,使用该方法只能得到编码的一个字节)   
   
   
  两者是不同的,就像上面举的例子,判断是否为"%"还要判断是否按下了Shift键(即参数Shift的值)。更一般的小写英文字母和大写英文字母,都是一个键,键值65-90($41-$5A)(数值上等于"A"到"Z"的ASC码),判断就看Shift值。而且有些字符可以通过多种方式输入,例如:数字0-9,键盘上两个地方有,键值分别是:主键盘上48-57($30-$39)(数值上等于ASC码),数字小键盘上是96-105($60-$69),象这样的情况很多,而且没发现它们之间区别的规律。   
  ////////////////////////////////////////////////   
  由于水品有限,上面的可能会有缺陷,谁要写的欢迎!这里谢谢了先!   
  觉得不好的也不要踢我!
妖城欢迎您!

TOP

发新话题