两者是有区别的,比如判断用户输入的是否是"%"代码分别如下:
//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
怎么只有三个人回帖!失败!呵呵!结贴!