Tom*_*omB 0 delphi android delphi-10.3-rio
我正在从 Delphi 10.2.3 升级到 10.3.3。我的 android 应用程序现在没有从虚拟键盘为 Return 键生成 OnKeyDown 事件。我已经使用一个非常基本的新创建的项目确认了这一点,所以它似乎与 10.2.3 的转换无关。
任何想法,将不胜感激。
embarcadero 的 QA 回复如下:
使用 KeyEvent 类和相关 API 处理键盘事件时,您应该期望此类键盘事件仅来自硬件键盘。对于软输入法(屏幕键盘)上的任何键,您永远不应依赖接收键事件。
我认为使用在文本更改时启动的方法是解决此问题的充分方法......
我认为这个Stackoverflow问题和这个Blogpost可能有用。”
提供的解决方案包括向 JFMXTextEditorProxy 添加一个 TextListener,而后一个接口已从 delphi 10.3 中消失。我目前正在尝试在 10.3 中实现等效的东西,但希望得到任何指导。顺便说一句:其他人会有不同的目标,但就我而言,我只想看到返回键。
更新:最初这被认为是一个错误。然而,embarcadero 的 QA 认为它不是,也不应该依赖虚拟键盘来触发键盘事件。但他们没有提供其他可行的替代方案。他们引用的博文不适用于10.3,而且似乎无论如何也看不到返回键。
我偶然发现了一种解决方法,它似乎有效,尽管它也可能容易受到未来变化的影响。
如果将 Tedit 的 ReturnKeyType 更改为Go、Search或Send 中的任何一个值,则将为返回键触发 onkeydown 事件。另一种选择是使用 OnChange 事件。这不会为返回键触发,当 Tedit 设置为 Default ReturnKeyType 时,但当设置为上述任何值(加上 Next)时,它将触发。ReturnKeyType 在设计时可用,也可以在代码中更改,例如:
edit1.ReturnKeyType := TReturnKeyType.Go;
Run Code Online (Sandbox Code Playgroud)
如果真的很绝望,我观察到如果编辑的内容确实发生了变化并且使用 Android 的“后退”按钮关闭虚拟键盘,OnChange 事件将触发。