德尔福XE5不能跳动空格键



使用 Delphi XE5,使用 FormKeyUp 或 KeyDown 方法时,空格键不能被三角

键值为 0(而不是 32),如果你是空格键。这是在XE2上工作。

procedure TfrmMaster.KeyDown(var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  if Key = vkSpace then
  begin
    //custom handling
    //if SomeTest then Exit; //don't do default handling
  end;
  inherited; //do default handling
end;

类型为桌面高清目标是Windows 32/64位和Mac OS

我可以在新的FMX HD应用程序中重现您的问题。快速测试表明永远不会发送vkSpace

  • 创建一个新的 Firemonkey HD 桌面应用程序
  • 在对象检查器的"Events"选项卡上,双击 OnKeyDown 事件,然后添加以下代码:
   过程 TForm4.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;      移位:状态);    开始      {      如果键字符 = #32,则      开始        显示消息("有空格键");        键字符 := #0;      结束;      }      如果键 = vk空间,则      开始        显示消息("有空格键");        键 := 0;      结束      还        显示消息('已接收密钥' + IntToStr(Key));    结束;
  • 运行应用程序,然后按空格键
  • 第二个ShowMessage执行,并指示它Received key 0

有一个简单的解决方法。我使用以下代码进行了测试:

   过程 TForm4.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;      移位:状态);    开始      如果键字符 = #32,则      开始        显示消息("有空格键"); 显示消息        键字符 := #0;                放弃击键      结束;    结束;

要允许在ShowMessage调用后默认处理击键,只需删除KeyChar := #0;即可。

最新更新