DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: hxh57738897
今日帖子: 24
在线用户: 22
导航: 论坛 -> 移动应用开发 斑竹:flyers,iamdream  
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2015/6/3 10:30:23
标题:
不完美-FMX 程序中避免输入焦点被虚拟键盘遮挡 浏览:6359
加入我的收藏
楼主: 转载自QDAC官网网站,文章发现问题可能随时更新,最新版本请访问:http://blog.qdac.cc/?p=2541

    Delphi 提供了一个 Demo,叫 ScrollableFormDemo,要实现避免输入焦点被虚拟键盘遮挡的效果,需要写一堆的代码。也许这一切已不再重要,但是,它却没有考虑虚拟键盘隐藏的问题,在你隐藏虚拟键盘时,它没有自动回复原位,所以这一切显得更加的不完美。

    为了避免每次都得写一堆代码的麻烦,我尝试换种思路来解决这一个问题,于是有了下面 vkbdhelper.pas 单元。但这个单元依然是三个字:不完美!不过我抛出来块砖,是希望将来第三方或官方能够更完美的解决这一问题。

    首先说一下大概的思路:

    1、订阅 TVKStateChangeMessage 消息,以得到普通的虚拟键盘状态改变消息。

    2、在虚拟键盘显示后,触发一个每隔 100ms 检查一次的定时器,以便在用户主动隐藏虚拟键盘时,能够检查到它的改变。

    3、如果检测到用户主动隐藏了虚拟键盘,那么自己触发一个TVKStateChangeMessage消息,这样子就回归到第 1 步正常的处理过程。也就是集中一个地方处理虚拟键盘状态的改变。

    好了,思路有了,那么接下来是考虑易用性的问题:

    实际上,易用性的设计一直是让人头痛的问题。我写这个单元就是为了解决系统自带的实现的不完美,虽然目前依然不是那么完美,但至少易用性上做到了我能做到的最好。你只需要在程序中的任意一个单元的 uses 里加入vkbdhelper,剩下的一句代码也不需要你去写。

    接下来,还需要说啥呢?代码代表我的心~~~~

    下载地址:http://pan.baidu.com/s/1c0DAgvQ

    为什么我说这个设计依然不完美?

    ○ 我使用了滚动框来调整这个布局,如果表单本身没有,我就直接添加了一个。但这个将控件从一个父挪到另一个父的过程,我不能保证它的布局不会发生变更。
    ○ 需要引入这个单元。
    ○ 目前仅支持 Android,iOS 我没有去苹果的东东,就没去测试。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2015/6/3 10:37:00
1楼: 本群 《不看后悔》
6.XXX 修复 安卓 输入法隐藏 后 无法退出的问题 3.4.txt

虽然不完美,但是肯定能解决问题。
当然,我这个还是需要自己写代码的,但是所有代码都给出了,抄就行。

ios 没有这个问题,无需修改。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2015/6/3 11:16:49
2楼: 不希望每次都去复制粘贴代码,希望是一次搞定。iOS 我现在没工夫去研究,如果有人愿意研究,欢迎提供解决方案。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 olddelphier (oldDelphier) ▲▲▲▲△ -
普通会员
2015/6/3 12:14:31
3楼: 多谢两位,正在搞这个问题

Delphi没把这个bug 解决很影响使用方便性
----------------------------------------------
-
作者:
男 lsh341999 (虫子) ★☆☆☆☆ -
普通会员
2015/6/3 13:40:10
4楼: 没看明白,
我抄ScrollableFormDemo里的代码,没去改原代码,没感觉到有啥问题啊
输入法隐藏了,会自动回复原位
而且我的程序就一个主FROM ,其他的都是FRAME,子窗体都是从主FROM虚拟出来的
一样继承了主FROM的ScrollableFormDemo特性
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2015/6/3 15:42:43
5楼: 自带的没啥大问题,主要的问题在于:
1、需要每个窗体抄一遍代码,如果有多个窗体,你就知道多烦人了。
2、如果点击输入法的隐藏按钮,隐藏输入法,那么很不幸,你的程序如果没有自己处理vkHardwareBack,那么程序可能退不出来。(问题在于TVKListener不知道这个状态改变,然后没有设置TVirutalKeyboardAndroid.FState,而TPlatform.Android 里默认响应vkHardwareBack取的虚拟键盘的状态就错了。始终在那儿尝试关闭虚拟键盘,但明显没什么卵用,所以就退不出来了)
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2015/6/3 15:48:39
6楼: 官网更新了最新版本,需要的可以到官网上下载,就不再重发了。优点就是只需要将它加入到工程中就行了,不需要修改任何文件。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 lsh341999 (虫子) ★☆☆☆☆ -
普通会员
2015/6/3 16:12:05
7楼: @chineseswish
建议只一个TForm,
其他的子窗体都用【TFrame】嵌在这个Form上
我就是这样做的,
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2015/6/3 16:32:33
8楼: 我没有限定自己只用Frame,我是Frame+Form都会用,看实际情况来选择。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 olddelphier (oldDelphier) ▲▲▲▲△ -
普通会员
2015/7/12 16:32:02
9楼: 用vkdbhelper解决了这个问题
多谢
----------------------------------------------
-
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2015/7/16 8:42:54
10楼: 2015.7.16 更完美
==========
* 修正了输入法隐藏后旋转屏幕时布局出现错乱的问题(感谢红鱼儿、多春鱼)
* 修正了特定场景下出现多余空白的问题

下载地址:http://pan.baidu.com/s/1jGH4ye6
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2016/6/28 14:08:47
11楼: 2016.6.28:针对滚动条优化
==========

在滚动条惯性滚动过程中,不去尝试调整从而避免惯性滚动时的抖动现象(SVN 已更新)。我能说坑爹的动画中的 FStarted 没有公开,造成我不得不去用RTTI来检查是否处于动画中嘛:(

2016.6.1:重新设计调整算法
==========

新算法考虑了滚动框和Memo等控件的支持,优先使用滚动类控件内部的滚动来调整位置,在不能满足需要时,才会整体上移布局
新版本已经加入 QDAC 的 SVN 源,并命名为 qdac_fmx_vkhelper.pas,以后更新直接检出即可
后面的下载仍是老版本,保持原样不再更新,以便供已经使用老版本,但不愿意改名的朋友下载。其它朋友推荐使用新版本。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 olddelphier (oldDelphier) ▲▲▲▲△ -
普通会员
2016/6/28 17:32:43
12楼: 一致很奇怪,这么明显的bug为何emb没改正呢?
----------------------------------------------
-
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2016/7/7 11:23:07
13楼: 2016.7.7
========
* 修正了 Delphi 的 iOS 实现的一处问题,详情参考:http://blog.qdac.cc/?p=4003
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2016/7/19 14:38:17
14楼: 2016.7.18
=========
* 修复了在特定场景下出现 AV 错误的问题

2016.7.19
=========
* 修正了特定场景下,调整焦点的位置过头的问题
* 修正了设置窗体的填充设置会失效的问题

至此,已知的问题全部修正,唯一不完美的地方就是需要单独引用这个单元,但这不是我能解决的问题,这个需要 Delphi 自己去做。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 bdl1 (bdl1) ▲▲▲▲▲ -
普通会员
2016/7/19 21:34:24
15楼: 太棒了!
----------------------------------------------
-我的博客
作者:
男 akay (akay) ★☆☆☆☆ -
普通会员
2016/7/20 9:48:15
16楼: 谢谢分享!!
----------------------------------------------
-
作者:
男 sailor77 (我悄悄地来) ★☆☆☆☆ -
普通会员
2020/7/30 3:58:28
17楼: 请问为何在10.3.3下无法使用,错误提示如下:
[DCC Error] qdac_fmx_vkhelper.pas(226): E2003 Undeclared identifier: 'ConvertPixelToPoint'
----------------------------------------------
-
作者:
男 kngstr (KngStr) ▲▲▲▲△ -
普通会员
2020/9/18 15:35:35
18楼: @sailor77 去qdac官网下载qdac,里面有支持10.3.3的版本
----------------------------------------------
-
作者:
男 jingzu (123456) ★☆☆☆☆ -
盒子活跃会员
2020/9/19 14:23:20
19楼: uses 
   FMX.Platform.UI.Android;
加上这个就可以了。
----------------------------------------------
永远是DELPHI初学者。
作者:
男 jingzu (123456) ★☆☆☆☆ -
盒子活跃会员
2021/8/28 8:35:09
20楼: 这个不支持10.4.2,请大老提供一个支持10.4.2的版本。
----------------------------------------------
永远是DELPHI初学者。
作者:
男 zjcqg (chen) ★☆☆☆☆ -
普通会员
2021/10/6 11:59:04
21楼: 好象对10.4.1也没效果,请大侠增强10.4.1的版本
----------------------------------------------
-
作者:
男 jingzu (123456) ★☆☆☆☆ -
盒子活跃会员
2021/10/6 17:48:34
22楼: D11也不行了。
----------------------------------------------
永远是DELPHI初学者。
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2021/10/18 10:20:12
23楼: 在10.2中效果不赖,挺好
在10.42里无效果!!!
Undeclared identifier: 'ConvertPixelToPoint'在10.42里uses 
   FMX.Platform.UI.Android; 确实可以解决问题,但是虚拟键盘仍旧遮挡控件

也不知道什么时候可以支持10.42
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 zjcqg (chen) ★☆☆☆☆ -
普通会员
2022/2/10 21:27:46
24楼: 修改FMX.VirtualKeyboard.Android.pas,放在工程目录中代替,可以完美解决问题,在10.4.1,10.4.2,11中都可以完美
----------------------------------------------
-
作者:
男 jingzu (123456) ★☆☆☆☆ -
盒子活跃会员
2022/2/13 8:47:54
25楼: @zjcqg (chen) 要修改那些地方?
----------------------------------------------
永远是DELPHI初学者。
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2022/2/23 23:03:28
26楼: 期待10.4.2版本的,
官网打不开,无法下载,有下载好的吗?
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 zjcqg (chen) ★☆☆☆☆ -
普通会员
2022/2/28 20:51:34
27楼: 25楼,上传针对delphi 10.4.1/10.4.2的,如果要用在delphi 11下,要把TVirtualKeyboardAndroid都改成TAndroidKeyboardVirtual,所以说delphi坑爹,改来改去.
此帖子包含附件:zjcqg_2022228205134.rar 大小:2,086B
----------------------------------------------
-
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2022/3/1 17:14:32
28楼: 感谢 zjcqg (chen)

Delphi 10.4.2 我把FMX.VirtualKeyboard.Android.pas拷贝到了工程目录下,也uses qdac_fmx_vkhelper 可是,不知道哪里出了错,就是没有效果???

覆盖FMX.VirtualKeyboard.Android.pas需要覆盖几个地方呢?
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 zjcqg (chen) ★☆☆☆☆ -
普通会员
2022/3/9 20:09:11
29楼: 28楼,不要用uses qdac_fmx_vkhelper(有冲突,不能用),直接把我上传的VirtualKeyboard.Android.pas复制到工程目录下就行,例如复制到官码..Samples\Object Pascal\Multi-Device Samples\User Interface\KeyboardTypes,你运行试试看
----------------------------------------------
-
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2022/3/21 0:42:26
30楼: zjcqg (chen):
覆盖替换了
C:\Program Files (x86)\Embarcadero\Studio\21.0\source\fmx下的VirtualKeyboard.Android.pas文件,在工程里remove了qdac_fmx_vkhelper,单元里uses里也移除了,
但是还是没有效果,依旧遮挡键盘,哈哈,感谢您再次赐教!
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 zjcqg (chen) ★☆☆☆☆ -
普通会员
2022/3/27 15:30:58
31楼: 30楼,不用覆盖替换了源码,只要把我的那个VirtualKeyboard.Android.pas放有你的工程目录下就可以,DELPHI会优先用这个文件。也搞懂了,反正我在10。4。1都好用。
----------------------------------------------
-
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2023/4/4 15:22:58
32楼: D11中将:要把TVirtualKeyboardAndroid都改成TAndroidKeyboardVirtual,

编译的时候提示:
[DCC Fatal Error] FMX.VirtualKeyboard.Android.pas(62): F2613 Unit 'FMX.Platform.Android' not found.

我检查了路径设置,里面包含了FMX.Platform.Android 所在的目录  RAD Studio 11.1\source\fmx

请问这是哪里出了问题?
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2023/4/6 11:25:24
33楼: 好吧,文件名称也需要改动。把文件名称改为:FMX.AndroidKeyboardVirtual.pas后编译没有问题了
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 jingzu (123456) ★☆☆☆☆ -
盒子活跃会员
2023/4/24 15:25:12
34楼: @ sxfgf  delphi113有效果吗?
----------------------------------------------
永远是DELPHI初学者。
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2023/4/24 15:51:47
35楼: @ jingzu ,这个还真不清楚
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 jingzu (123456) ★☆☆☆☆ -
盒子活跃会员
2023/4/25 7:55:14
36楼: @sxfgf 按你说的编译通过了,也能生成APK,但安装上手机上,没有效果,不知道问题出在那里?
----------------------------------------------
永远是DELPHI初学者。
作者:
男 jingzu (123456) ★☆☆☆☆ -
盒子活跃会员
2023/4/25 10:20:54
37楼: @zjcqg (chen): D113编译通过,但没有效果,怎么使用?
----------------------------------------------
永远是DELPHI初学者。
作者:
女 wfymqj (wfymqj) ★☆☆☆☆ -
盒子活跃会员
2023/9/12 11:42:55
38楼: D11.3编译通过,确实没有效果
----------------------------------------------
-
作者:
男 zyp1984 (小李他妈的飞刀) ★☆☆☆☆ -
普通会员
2023/9/12 23:11:36
39楼: D11.3已经不需要单独处理键盘上浮问题了。不知道是新版安卓解决的还是开发工具解决的。
----------------------------------------------
山外青山楼外楼,能人背后有能人弄..
作者:
女 wfymqj (wfymqj) ★☆☆☆☆ -
盒子活跃会员
2023/9/13 9:00:22
40楼: @zyp1984  我用D11.3编译的APP,在安卓13和安卓10上运行,还是会出现输入焦点被虚拟键盘遮挡。请问你是怎么处理的?与布局有关吗?
----------------------------------------------
-
作者:
女 wfymqj (wfymqj) ★☆☆☆☆ -
盒子活跃会员
2023/9/13 13:20:45
41楼: 今天我按D11.3官方Demo ScrollableForm中的方式操作了,可以基本达到效果。只是主动隐藏虚拟键盘时,没有复位而已
----------------------------------------------
-
作者:
男 mystery (艾伦希亚) ★☆☆☆☆ -
普通会员
2024/1/6 21:25:08
42楼: D12不知该如何解决虚拟键盘隐藏时,应该要自动失焦并执行FormVirtualKeyboardHidden。替换了FMX.VirtualKeyboard.Android,或是uses了qdac_fmx_vkhelper都没有效果。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行121.0938毫秒 RSS