Delphi XE5无法触发空格键

Delphi XE5无法触发空格键,delphi,delphi-xe5,firemonkey-fm3,Delphi,Delphi Xe5,Firemonkey Fm3,在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

在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
    事件,并添加以下代码:

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

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

  • 创建新的Firemonkey HD桌面应用程序
  • 在对象检查器的
    Events
    选项卡上,双击
    OnKeyDown
    事件,并添加以下代码:

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

谢谢您的编辑。这使问题更加清楚。我已取消投票,并发布了答案。:)谢谢你的编辑。这使问题更加清楚。我已取消投票,并发布了答案。:)谢谢,它也在我的集合中使用KeyChar而不是Key参数。在XE2上,我取消了关键参数,它正在工作,当我在XE5中对项目提出异议时,关键参数似乎不再工作。谢谢,通过使用KeyChar而不是Key parameter,它也在我的集合中工作。在XE2上,我取消了关键参数,它正在工作,当我在XE5中否决了该项目时,关键参数似乎不再工作。 procedure TForm4.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin { if KeyChar = #32 then begin ShowMessage('Got space bar'); KeyChar := #0; end; } if Key = vkSpace then begin ShowMessage('Got space bar'); Key := 0; end else ShowMessage('Received key ' + IntToStr(Key)); end; procedure TForm4.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin if KeyChar = #32 then begin ShowMessage('Got space bar'); // Display message KeyChar := #0; // Discard keystroke end; end;