Delphi:VK_SPACE,右键

时间:2015-05-21 05:33:18

标签: delphi

我有点困惑。上 : http://delphi.about.com/od/objectpascalide/l/blvkc.htm

它表示" Space"的正确键。是#20。试过,它不会起作用。 但是,用#32替换它似乎有效:

procedure TForm14.cxTextEdit5KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in [#8,#32, '0'..'9']) then begin
  ShowMessage('Only numbers !');
  Key := #0;
  end;
end;

所以现在我不确定这是否适用于所有Windows版本?

2 个答案:

答案 0 :(得分:8)

是。在所有版本的Windows中,VK_SPACE被定义为0x20(在C表示法十六进制值20中等于32)。 您的链接也列出了十六进制值。

修改

正如David所指出的,虚拟密钥代码VK_SPACEOnKeyPress事件处理程序的上下文中是无关紧要的。 (它用空格字符的ASCII值定义的事实应该被视为巧合。)

您可以简单地依赖#32是空格字符的正确表示法(#$20或简称' ')这一事实。

答案 1 :(得分:4)

  

它说“太空”的正确键是#20。

不,不。 #20是序数为20十进制的字符。您引用的表包含十六进制值。 VK_SPACE是一个虚拟键码,一个整数,其值为十进制32,十六进制为20。

但是,OnKeyPress事件处理程序不使用虚拟键代码,VK_SPACE的值与您的问题无关。 OnKeyPress事件处理程序使用UTF-16字符代码。空格的UTF-16字符代码是32位十进制,20位十六进制。如果使用Unicode前Delphi,OnKeyPress使用ANSI而不是UTF-16。

值得记住的是,OnKeyPress使用UTF-16 / ANSI代码,因为它对应WM_CHAROnKeyDownOnKeyUp通过WM_KEYDOWNWM_KEYUP触发来使用虚拟键码。