返回
Delphi FMX Android 上如何检测 Enter 键?
Android
2024-03-06 16:42:48
如何在Delphi FMX Android上检测Enter键
问题概述
在Delphi FMX中,当物理键盘上的Enter键被按下时,在OnKeyDown
和OnKeyUp
事件中无法获取该键值,因为没有收到任何值表示vkReturn
键已被按下。
解决方法
1. 禁用硬件键盘
首先,禁用硬件键盘,这样我们就可以使用键盘组件来处理按键事件:
Keyboard.HandleHardwareKeyboard := False;
2. 订阅OnKeyUp事件
接下来,订阅Form.OnKeyUp
事件,并在其中检查是否按下了Enter键:
procedure TMyForm.FormKeyUp(Sender: TObject; var Key: Word; var Shift: TShiftState);
begin
if Key = VK_RETURN then
begin
// Enter键按下时执行的操作
end;
end;
代码示例
unit Unit1;
interface
uses
System.SysUtils, System.Classes, System.UITypes,
FMX.Forms, FMX.Controls, FMX.Edit;
type
TMyForm = class(TForm)
private
procedure FormCreate(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word; var Shift: TShiftState);
public
end;
var
MyForm: TMyForm;
implementation
{$R *.fmx}
procedure TMyForm.FormCreate(Sender: TObject);
begin
inherited;
// 禁用硬件键盘
Keyboard.HandleHardwareKeyboard := False;
end;
procedure TMyForm.FormKeyUp(Sender: TObject; var Key: Word; var Shift: TShiftState);
begin
if Key = VK_RETURN then
begin
// Enter键按下时执行的操作
end;
end;
end.
优势
此方法的主要优点是,它不需要修改Android设备的Generic.kl
文件,也不依赖于设备是否已植根。
其他注意事项
- 确保在
Form.Create
事件中禁用硬件键盘。 - 在
Form.KeyUp
事件中检查VK_RETURN
键值以检测Enter键是否被按下。 - 此方法依赖于
Keyboard.HandleHardwareKeyboard
,它仅在FMX 3+版本中可用。
常见问题解答
-
为什么我的代码不起作用?
- 确保已禁用硬件键盘,并在
Form.KeyUp
事件中正确检查了VK_RETURN
键值。
- 确保已禁用硬件键盘,并在
-
我收到编译错误,说
Keyboard
未定义。- 确保已包含
System.UITypes
单元。
- 确保已包含
-
为什么我无法在
Form.KeyDown
事件中捕获Enter键?- 此方法仅在
Form.KeyUp
事件中有效,因为当Enter键按下时,硬件键盘不会发送任何按键事件。
- 此方法仅在
-
我是否可以将此方法用于其他键?
- 是的,您可以使用相同的技术来检测其他按键,只需在
Form.KeyUp
事件中检查适当的键值即可。
- 是的,您可以使用相同的技术来检测其他按键,只需在
-
我需要了解哪些其他技术来处理键盘事件?
- 除了
OnKeyUp
和OnKeyDown
事件外,你还可以使用OnKeyPress
事件来检测键盘事件。
- 除了