1

在 Delphi XE5 中,使用 FormKeyUp 或 KeyDown 方法时无法触发 SpaceBar。

如果您使用空格键,则键值为 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;

类型是 Desktop HD 目标是 Windows 32/64 位和 Mac OS

4

1 回答 1

1

我可以在新的 FMX HD 应用程序中重现您的问题。快速测试显示vkSpace从未发送过。

  • 创建一个新的 Firemonkey 高清桌面应用程序
  • EventsObject Inspector 的选项卡上,双击OnKeyDown事件,然后添加以下代码:
    过程 TForm4.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
      移位:TShiftState);
    开始
      {
      如果 KeyChar = #32 那么
      开始
        ShowMessage('有空格');
        KeyChar := #0;
      结尾;
      }
      如果 Key = vkSpace 那么
      开始
        ShowMessage('有空格');
        键:= 0;
      结尾
      别的
        ShowMessage('收到密钥' + IntToStr(Key));
    结尾;
  • 运行应用程序,然后按Space
  • 第二个ShowMessage执行,并指出它Received key 0

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

    过程 TForm4.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
      移位:TShiftState);
    开始
      如果 KeyChar = #32 那么
      开始
        ShowMessage('有空格'); // 显示消息
        KeyChar := #0; // 放弃击键
      结尾;
    结尾;

要在调用后允许对击键进行默认处理ShowMessage,只需删除KeyChar := #0;.

于 2013-11-06T01:28:25.073 回答