delphi中 keyDown事件下代码为 if key=39 then showmessage('按下了右键'); 想要做在keypress事件中怎么写
2017-10-27 · 知道合伙人软件行家
OnKeyPress 和 OnKeyDown 两种事件的原型定义如下:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
从定义看,两种事件的 Key 参数名称相同,但数据类型是不一样的:Char 和 Word。
简单点说,这两种不同的数据类型说明:
OnKeyPress 传递的参数是字符,而 OnKeyDown 是键值。
OnKeyPress 接受的 Key 参数是字符值(简单点说,就是接受 ASCII 码表中的值,但通常是字母、数字等),而 OnKeyDown 可以接受 Key 参数是键盘按键的值(除了少数键,大部分键都能触发事件)。
OnKeyPress 事件,对于 键盘的 右方向键(→):VK_RIGHT (码值39),并不能被触发。
可编写代码通过测试观察:
当按下字母 a 时,先触发 KeyDown 事件,再触发 KeyPress 事件;而如果按 右方向右方向键(→),则只触发了 KeyDown 事件:
KeyDown 中,Key 值是 65(大写字母 a 的 ASCII 码) ,而 KeyPress 中是 97(小写字母 a 的 ASCII 码),可以看出:
KeyDown 并不能由 Key 来区别开大小写字母的区别,而 KeyPress 可以。
KeyPress 不能检测到 CapsLock(大写字母锁定)、Shift、Ctrl 等键,而 KeyDown 可以。
因为我这个问题是想解决工作上的一个问题 ,它代码里在keypress事件里写了一个公用的函数,这个函数视对按下空格之后进行处理的。我现在业务上需要做到按下方向右等于按下空格键,有什么办法吗?
大哥,本人菜鸟啊。 能不能劳烦敲敲键盘,详细解释一下呢
var
rrd: Boolean;
...
rrd := False;
...keyDown...
rrd := True;
...keypress...
if rrd = True then begin
// do something
rrd := False;
end;
...