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

ListView 不需按ctrl 鍵 直接多重選取的問題

尚未結案
noline
一般會員


發表:2
回覆:3
積分:1
註冊:2004-07-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-31 16:54:53 IP:220.130.xxx.xxx 未訂閱
ListView不像ListBox有ExtendedSelect可以設false之後就可接用滑鼠多重選取 不需再按Ctrl鍵!! 於是我在ListView裡的OnMouseDown(OnClick也試過)裡加上 keybd_event(VK_CONTROL,0,0,0); 這樣就可以達到直接多重選取的功能 可是我找不到合適的地方加上 keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); 把按鍵放掉。 我嘗試加在OnMouseUp裡,但這樣就不能多重選取了 ListView多重選取的程序應該是在OnMouse~ 這些event之後!! 請問各位前輩有比較好的方法嗎? Best Regards, Bill
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-31 19:07:33 IP:203.70.xxx.xxx 未訂閱
noline您好 多選時一般都是按著Ctrl鍵吧... 因此主要是使用者何時完成多選,何時才把按鈕放開... 如果在MouseUp()就把按鈕放開,下次觸發MouseDown()時就會因為來不及 執行keybd_event()而變成單選... 小弟給個建議,如果提醒使用者按右鍵來結束多選的話,這樣還是能達到使用 滑鼠就能完成操作的目的(不知這是否是您的目的??) 這樣就只要  
void __fastcall TForm1::ListView1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  if (Button == mbLeft)
    keybd_event(VK_CONTROL,0,0,0);
  else
    keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
} 
參考看看 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-01 01:53:58 IP:61.59.xxx.xxx 未訂閱
不知道是不是誤解你的意思了.. 把ListView 的MultiSelect 設成 true 看看
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-01 09:43:37 IP:219.84.xxx.xxx 未訂閱
我果然是誤解了... 你看看這樣合不合用..  
 
void __fastcall TForm1::ListView1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
  if(ListView1->GetItemAt(X,Y))
   keybd_event(VK_CONTROL,0,0,0);
  else
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}
noline
一般會員


發表:2
回覆:3
積分:1
註冊:2004-07-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-01 11:37:02 IP:220.130.xxx.xxx 未訂閱
先謝謝ENIX007 bass15 兩位的回應 ENIX007您的方法不錯,可是終究還得去按右鍵 我很怕user忘記了。 bass15 您那個也不行,我將游標直接拉到ListView外 就沒辦法去放開Ctrl鍵。
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-01 12:58:56 IP:219.84.xxx.xxx 未訂閱
那改成這樣呢??  
    void __fastcall TForm1::ListView1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
  if( X==0 || Y==0 || !ListView1->GetItemAt(X,Y))
     keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
  else
     keybd_event(VK_CONTROL,0,0,0);    }
 
系統時間:2024-05-13 22:24:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!