使用 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;
即可。