无法处理双击事件,该怎么办? VCL组件开发及应用http://www.delphi2007.net/DelphiVCL/html/delphi_20061225152031121.html
自己编个文档管理小程序,界面布局是左边一个TreeView,管理文档结构,右边一个TWebBrowser控件,负责显示。当双击左边的文档时,右边显示该文档;单击其它文档时,清空显示。普通文档没有问题,如果当前显示是Word,Excel等Ole类型的文档时,双击其它文档时不能截获双击事件,而将双击分割成两个单击事件处理,成了更改文件名的操作,如何处理这种情况?老大们给点建议,谢谢
与文档类型无关,肯定是你的代码自己的问题,打死我也不信,TreeView还这么神,能够自动识别Word的文件?呵呵
可能我没说清楚,双击TreeView下的文档节点时,在TWebBrowser中显示双击的文档,我现在碰到的问题实际上是,当TWebBrowser当前显示的文档为Word,Excel等OLE文档时,想要双击其他文档节点进行显示切换,但是由于这个过程中浏览器控件先要关闭前一个文档,然后再显示新双击的文档,使得双击事件的两次点击间隔被延迟,分成了两个单击事件进行处理,碰到这种情况该如何处理?将被分隔的两个单击事件还原成一个双击事件进行处理,或者有其他更好的方法,谢谢~~
可能可以在单击后等一下,判断是否是双击然后再处理。。。 或者像办法规避这个问题。。。
浏览器都是单击的吧??是不是这个原因??如果让我做的话,也只能像楼上那样做了
你的关闭TWebBrowser是写在哪个事件里的?
to keyz:
TWebBrowser的关闭是写在双击事件里的~~
首先是ClearBrowser, 再执行关闭Browser操作,并一直检查Browser状态,因为Browser的关闭是有一个时延的,直到检测Browser状态为关闭时,才根据新文档的URL进行Open操作。
to littlestone08:
我所说的单击双击事件都是针对TreeView的节点而言的,Browser只是根据TreeView传递的URL进行文件打开和显示而已。
(1)单击操作和双击操作的判断,是由操作系统通过对鼠标的采样来确定而直接送给Delphi系统,还是由Delphi系统自己进行计算来评判?
(2)因为我实际所进行的是双击操作(两次单击的时间间隔小于系统设定),而由于TBrowser进行OLE文档操作的时延使程序双击操作解释为两次单击操作,哪位达人对Delphi单击、双击事件的处理流程比较明白的,可否说明一下,就目前自己分析,当鼠标双击时,系统事件处理应该是:
(捕获第一个击键)OnMouseClick -> OnMouseDown -> 。。。-> (捕获第二次击键)判断为双击事件OnMouseDbClick-> ...
当确定前面的流程为一次双击操作时,前面的流程如何实现?通过消息堆栈储存第一次点击消息暂不处理,然后判断为双击时抛弃前一次单击消息而不作单击事件处理?
想到啥写啥,也不知对不对,请高手指点,呵呵
(1)单击操作和双击操作的判断,是由操作系统通过对鼠标的采样来确定而直接送给Delphi系统,还是由Delphi系统自己进行计算来评判?
(2)因为我实际所进行的是双击操作(两次单击的时间间隔小于系统设定),而由于TBrowser进行OLE文档操作的时延使程序双击操作解释为两次单击操作,哪位达人对Delphi单击、双击事件的处理流程比较明白的,可否说明一下,就目前自己分析,当鼠标双击时,系统事件处理应该是:
(捕获第一个击键)OnMouseClick -> OnMouseDown -> 。。。-> (捕获第二次击键)判断为双击事件OnMouseDbClick-> ...
当确定前面的流程为一次双击操作时,前面的流程如何实现?通过消息堆栈储存第一次点击消息暂不处理,然后判断为双击时抛弃前一次单击消息而不作单击事件处理?
想到啥写啥,也不知对不对,请高手指点,呵呵
试了一下,但是无法重现你的问题。。
测试了一下几个事件,发现双击的时候顺序是:
MouseDown
Click
MouseUp
DblClick
MouseDown
MouseUp