【发布时间】:2016-08-11 09:11:46
【问题描述】:
我为在 Windows 8.1 平板电脑上运行的 VCL 应用程序创建了一个 TCustomControl 派生类。
我正在使用 OnMouseDown / OnMouseUp 事件,尽管这显然是基于触摸的。
我想做的是检测长按 - 即触摸并按住 1 秒钟。所以在OnMouseDown事件中,我记录了向下的时间戳,设置一个标志来指示鼠标处于关闭状态,并创建一个休眠1秒的匿名线程,然后检查该标志。
在 OnMouseUp 中,我将标志设置为 false。
只要您在控件上摆动手指,此方法就可以工作。否则,如果您只是触摸并按住鼠标按下事件,则在您松开手指之前不会调用。
我看过手势,但这看起来完全是矫枉过正,据我所知,无论如何都不支持长按。
感谢您的任何建议。
理查德
【问题讨论】:
-
如何在 MouseDown 发生时以 1000 毫秒的间隔激活一个计时器,并在 MouseUp 上取消它。将您的代码放入 OnTimer 事件中。只有在他们按住鼠标超过一秒钟后才会触发它。只要您保存启动它的控件,您就可以为整个表单使用一个计时器。不要忘记在 OnTimer 事件中立即禁用计时器。
-
谢谢,但这与匿名线程的原因不同,除非您摆动手指或抬起手指,否则 MouseDown 不会触发。
-
我没有 Windows 平板电脑,但我只是在新的 VCL 表单(柏林)中添加了一个 TButton 和一个 TMemo,并添加了代码以在 MouseDown 和 MouseUp 事件中向备忘录添加一行处理程序,这两个事件清楚地单独触发并与鼠标单击同步。平板电脑从标准 PC 鼠标触发事件的方式肯定有所不同。
-
谢谢 - 是的,它与标准鼠标处理不同。如果我在台式 PC 上运行该应用程序并使用鼠标而不是手指,它会按预期运行。
标签: delphi touch windows-8.1 vcl