请问ONMOUSEDOWN事件中的键值与ASCII码有什不同? (50分)

  • 主题发起人 主题发起人 吴明星
  • 开始时间 开始时间
OnMouseDown中的键值?????
你是指OnKeyDown吧。
 
不好意思,一次失误。是OnKeyDown事件
 
OnKeyDown里的键值是virtual key code, 是对按键的编码 键盘上的每一个按键都有对应的
virtual key code, 而ASCII码是对字符的编码,两者完全是两个概念。
比如,拿'7'健来说,virtual key code = 55, ASCII码的'7'也是55,但这只是为了方便
而定义的,并不能把两者等同起来,因为'y'键还对应着另一个ASCII字符'&'= 38.

不知这么说明来了没有。
 
1.FormKeyPress(Sender: TObject
var Key: Char)中Key是Ascii码

2.FormKeyDown(Sender: TObject
var Key: Word
Shift: TShiftState)中
Key 是Microsoft 在其SDK中规定的虚拟键。
请打开Delphi帮助, 查找 Virtual key codes 即可知道答案。
也可找一本C语言开发Windows程序的的书来看一下。



 
OnKeyDown获得的是虚拟键码(virtual key code)对于键盘上的每个键有唯一键码。
~~
ASCII的是美国标准信息交换代码,是对字符的唯一编码。
~~~~
 
一般来说,数字ASCII码拥有和虚拟键码相同的值。
大写字母ASCII码拥有和虚拟键码相同的值。
但小写字母ASCII码与虚拟键码就完全不同。
例如,当CAPS LOCK没有锁定,则用OnKeyPress返回的值为97('a'),而OnKeyDown返回的值为65('A')
当CAPS LOCK锁定,则两者均返回65。
 
吴明星: 要用ASCII?
不如响应WM_CHAR算了。

procedure TForm1.mywmchar(var msg: TWMCHAR);
begin
if msg.CharCode = Ord('a') then Beep;
end;

 
多人接受答案了。
 
后退
顶部