加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

在Windows平板电脑上与Delphi VCL长时间接触

发布时间:2020-12-14 02:51:27 所属栏目:Windows 来源:网络整理
导读:我为在 Windows 8.1平板电脑上运行的VCL应用程序创建了一个 TCustomControl派生类. 我正在使用OnMouseDown/OnMouseUp事件,即使这显然是基于触摸的. 我想做的是检测长按 – 即触摸并保持1秒钟.因此,在OnMouseDown事件中,我记录了向下时间戳,设置一个标志以指
我为在 Windows 8.1平板电脑上运行的VCL应用程序创建了一个 TCustomControl派生类.

我正在使用OnMouseDown/OnMouseUp事件,即使这显然是基于触摸的.

我想做的是检测长按 – 即触摸并保持1秒钟.因此,在OnMouseDown事件中,我记录了向下时间戳,设置一个标志以指示鼠标已关闭,并创建一个休眠1秒钟的匿名线程,然后检查该标志.

在OnMouseUp中,我将标志设置为false.

只要您在控件上摆动手指,这就可以正常工作.否则,如果您只是触摸并按住鼠标,则在释放手指之前不会调用事件.

我看一下手势,但这看起来完全矫枉过正,而且据我所知不支持长按.

谢谢你的任何建议.

理查德

解决方法

您所面临的是具有触摸输入设备的Windows的“正常”但可笑的愚蠢行为.我们暂时面临同样的问题,并且正在努力在过去几周内积极解决这个问题.
诀窍是,窗口将触摸输入设备称为“鼠标,可以用单指完全控制”.因此,它有几个状态,不仅仅是事件:

事件包括:触摸开始(向下),移动,向上,向右键,如果你真的想注册一个回调,你将变得静止(自上次报告以来没有移动但仍然下降).

与此同时,还有更多州.首先,当您用手指按下时,它会在内部检测到“触摸!”事件.它等待一定的时间(可能会或可能不会被黑客改变,取决于驱动程序等……),以确定你想要的是右键点击(x时间之后,释放后!时间!它会触发右键单击事件)或是否是左键单击(触发事件TouchBegin – 在y时间之后,比x时间更长,在y到期之后,它将触发向左事件(不是单击! )).
同时,如果第一次触地被任何一次移动中断或 – !!等待x时间到期!!手指释放在x时间用完之前,它将自动触发左下(移动)或左击(释放时).在Y时间到期后的任何时间也是如此,或者触发MOVE.

为了更简单和可理解,我将试着举个例子:

假设你有触摸设备,时间如下:
B点开始,位于我们时间轴的0秒处.
点X是第一个触发断点,位于我们时间轴的5秒处.
Y点是第二个触发断点,位于我们时间轴的10秒处.

你将手指触摸,然后开始时间线.
可能的情况:
? – 你在X点之前的任何时候发布它 – >触发左键单击(触及向上和向上事件,按顺序一个接一个地触发)
? – 你在点X之后但在点Y之前释放它 – >触发右键单击(触摸向上和向上事件,右键单击标记)
? – 你到达Y点 – 左下触发!
? – 你可以随时在Y点之后释放它,无论是否在释放之间移动触发(但是在??时间线到达此点之前未触发移动) – >左侧被触发.

>在到达X点之前触发(do)移动事件 – >触发左下,然后检测到它的移动事件数,直到你释放它为止 – >然后被触发了
>你在X之后但在Y之前触发(do)移动事件 – >和上面一样!
>你到达Y点然后移动它 – >检查点no4以上.

希望这对你有意义.

现在跳转到可能的解决方案:自定义驱动程序将是一个选项,但我们还没有,所以我们仍在尝试其他选项.现在最有希望的似乎是使用RAW_INPUT和Touch钩子,看起来我们必须将它们组合起来才能得到我们想要的东西.
好的一面是,当手指接触设备时,窗口本身会检测到,无论它想要检测的时间和事件,确定然后转发到应用程序,但由于某种原因,它们很难在这种性质中使用.作为证据,您可以在触摸屏幕的第一刻简单地检查手指下方出现的透明点.

同时,Android更好地处理这些事情……

希望它有所帮助,我很高兴能够在我们完成后获得完整的解决方案并获得足够好用的东西.

M. *

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读