【问题标题】:Delphi XE5 can not trig Space barDelphi XE5 无法触发空格键
【发布时间】:2013-10-23 02:22:22
【问题描述】:

在 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;

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

【问题讨论】:

  • 感谢您的编辑。它使问题更加清晰。我删除了我的近距离投票并发布了答案。 :)

标签: delphi delphi-xe5 firemonkey-fm3


【解决方案1】:

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

  • 创建一个新的 Firemonkey 高清桌面应用程序
  • 在对象检查器的Events 选项卡上,双击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;

【讨论】:

  • 谢谢,通过使用 KeyChar 而不是 Key 参数,它也在我的设置上工作。在 XE2 上,我取消了关键参数并且它正在工作,当我在 XE5 中打开项目时,关键参数似乎不再工作。
猜你喜欢
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多