全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2186
推到 Plurk!
推到 Facebook!

如何判斷滑鼠離開ComboBox?

答題得分者是:RootKit
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-23 13:54:49 IP:222.90.xxx.xxx 未訂閱
       程式在Combobox1的list box中顯示資料後,我將滑鼠移到Combobox1後(code 如下),希望滑鼠如果不從Combobox1的list box選擇item ,則在滑鼠離開Combobox1時,Combobox1的list box可以自動close,但是我不知道如何判斷滑鼠是否離開ComboBox?
var
Tp: Tpoint;
...
TP:= ClientToScreen(point(combobox1.Left 3,combobox1.top combobox1.Height 3));
SetCursorPos(Tp.x, Tp.y);

Q:如何判斷滑鼠離開ComboBox?
希望各位先進指點!
謝謝!
編輯記錄
mathewzhao 重新編輯於 2008-05-24 03:01:43, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-25 16:14:02 IP:61.67.xxx.xxx 未訂閱
雖然不知道你要這個功能用意在那裡, 但如果combobox下拉展開的情況下, 只要滑鼠鼠移開box 位置以外, 同時讓combobox 失去焦點(focus), 展開是會自動收合的(但只移開滑鼠是不會的, 必須有click的動作才行)
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-26 19:45:42 IP:61.222.xxx.xxx 訂閱
Q:如何判斷滑鼠離開ComboBox?
一般是會觸發 CM_MOUSEENTER (滑鼠移至物件 非焦點)滑鼠離開會引發 CM_MOUSELEAVE Message

不過需注意! CM_MOUSELEAVE 並不保證一定會觸發(有進不一定有出)。
有時滑鼠很快的移動到別的地方,就不觸發了。
不過這個機會很少,通常用遺漏方式來加強。例如 觸發 CM_CANCELMODE 來解決。

或者 巧用 SetTimer KillTimer 來補充。
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-05-27 00:40:32 IP:61.222.xxx.xxx 訂閱
要滿足你的目的。用 CM_MOUSELEAVE 可能是行不通的。
因為 ListHandle 跟 ComboHandle 並非同一個。因此無法判別 移至 List 還是別位。
既使做到可以判別,但 List 滑鼠移出並沒有觸發 CM_MOUSELEAVE 這個訊息可能是另外但無從得知。

建議 Override DropDown 當下拉時 啟用 SetTimer 去檢查滑鼠位置是否為 Handle 、EditHandle、ListHadle(需自取)
若非則 KillTimer 並設定 DroppedDown := False;關閉下拉。
系統時間:2024-04-24 13:45:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!