無法處理雙擊事件,該怎麼辦? 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