说一下OnKeyDown,OnKeyPress,OnKeyUp事件中的参数Key,不需要的也请帮忙up一下

时间:2020-12-21 19:47:20
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),象这样的情况很多,而且没发现它们之间区别的规律。
////////////////////////////////////////////////
由于水品有限,上面的可能会有缺陷,谁要写的欢迎!这里谢谢了先!
觉得不好的也不要踢我!

4 个解决方案

#1


好,收藏!

#2


看看
基础要牢固

#3


up

#4


怎么只有三个人回帖!失败!呵呵!结贴!

#1


好,收藏!

#2


看看
基础要牢固

#3


up

#4


怎么只有三个人回帖!失败!呵呵!结贴!