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

DBGrid 如何做到滑鼠只用單鍵增加多選?

答題得分者是:wameng
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-28 15:07:31 IP:211.22.xxx.xxx 未訂閱
目標: 想要將程式做出拋轉單據的功能, 所以要利用另一個 Form 來列出清單 然後讓使用者選擇需要的多筆紀錄, 但是多選都要配合按住 Ctrl 鍵. 使用者希望能只用滑鼠單擊或雙擊點選多筆紀錄. 問題: 本想用 DBGrid.OnMouseDown 事件來處理. 才發現 DBGrid 在有資料顯示的時候, 滑鼠點選資料的 Cell 都不會引發 OnMouseDown 事件, 只有在標題列會有引發. 而改用 OnClick 或 OnDblClick 來處理. 每點選一次先前所選的都 UnSelect 了. 請問要如何用標準元件 DBGrid 來達成單擊或雙擊來增加多選呢? 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-28 16:29:07 IP:61.59.xxx.xxx 未訂閱
提供一個方法,利用程式模擬Ctrl 在DBGRID的OnCellClick加入 keybd_event(VK_CONTROL,29,KEYEVENTF_EXTENDEDKEY OR 0 ,0); //按住Ctrl 在DBGRID的OnExit加入 keybd_event(VK_RCONTROL,29,KEYEVENTF_EXTENDEDKEY OR KEYEVENTF_KEYUP ,0);//離開DBGRID時Ctrl按鍵放開 如果控制的好的話,應該可以達到你的需求
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-30 10:43:18 IP:61.31.xxx.xxx 未訂閱
如您所願!..... 在 Type 加入以下程式碼 type TDBGrid = class(DBGrids.TDBGrid) protected procedure MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer);Override; end; TForm1 = class(TForm) ..... ..... procedure TDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); begin inClude(Shift,ssCtrl); inherited MouseDown(Button,Shift,X, Y); end; 這樣就可以了。
webber
初階會員


發表:54
回覆:76
積分:26
註冊:2004-04-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-30 14:28:07 IP:61.230.xxx.xxx 未訂閱
唉...我是去改source code 加一個flag略過一些clearselection的動作    K.Top是我見過最棒的程式社群
如果沒有K.Top真不知道該怎麼活
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-31 10:05:52 IP:211.22.xxx.xxx 未訂閱
引言: 如您所願!..... 在 Type 加入以下程式碼 type TDBGrid = class(DBGrids.TDBGrid) protected procedure MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer);Override; end; TForm1 = class(TForm) ..... ..... procedure TDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); begin inClude(Shift,ssCtrl); inherited MouseDown(Button,Shift,X, Y); end; 這樣就可以了。
這是最快速簡單的處理方法了, 我還在想要是我直接更動了系統原始碼, 那麼就會導致所有的 DBGrid 全部都有同樣的特性. 在想改變的 Form 中, 加入此段 Code 該 Form 中的所有 DBGrid 才會受影響. 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
webber
初階會員


發表:54
回覆:76
積分:26
註冊:2004-04-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-06 01:21:26 IP:61.230.xxx.xxx 未訂閱
引言: 唉...我是去改source code 加一個flag略過一些clearselection的動作 K.Top是我見過最棒的程式社群
如果沒有K.Top真不知道該怎麼活
錯誤示範, 千萬別學... /> 如果沒有
系統時間:2024-06-26 14:03:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!