2013-06-02 37 views
-1

MouseMove事件我需要在列表視圖中選擇項目,如果我的鼠標點擊拖動它們。我的代碼不起作用。當我點擊並只拖動第一個項目時,我點擊被選中。選擇Listitems拖動不工作

MouseMove事件:

所有的
//If left mouse button is depressed 
if(GetAsyncKeyState(VK_LBUTTON) = 1) then 
    begin 
    LListItem := NestingResultsListView.GetItemAt(x,y); 

    //If the item is not selected, select it. 
    if not LListItem.Selected then 
    begin 
     LListItem.Selected := true; 
    end; 
    end; 

回答

0

首先,GetAsyncKeyState返回在這個詞的最顯著位「向下」的狀態,所以你應該喜歡寫東西GetAsyncKeyState(VK_BUTTON) and $8000 <> 0

其次,使用GetAsyncKeyState作爲鼠標按鈕並不是一件好事,因爲它檢查物理按鈕(並且如果用戶是左撇子並重新映射按鈕,他將會感到困惑,因爲您的代碼需要按下鼠標左鍵)。更好的方法是記住OnMouseDown事件中按下的鼠標按鈕並在OnMouseUp事件中更新/重置它們。

+0

你的意思是'GetKeyState'而不是'GetAsyncKeyState'。不是我認爲這是做到這一點的方法,但是如果您要在鼠標移動事件中調用其中一個函數,它將是'GetKeyState'。 –

+0

OP使用'GetAsyncKeyState',我的意思是它也。而且我在GetKeyState文檔中沒有找到它支持鼠標按鈕的方法,但它明確指出了'GetAsyncKeyState'。 – Inspired

+0

OP很可能使用'GetAsyncKeyState',但你認爲這是正確的做法嗎?是的,您可以將'VK_LBUTTON'傳遞給'GetKeyState'。我希望看到你解決這個問題。 –

2

TListView有一個MultiSelect屬性,檢查在對象檢查器中,然後你可以用鼠標拖動來選擇多個項目,你不需要自己編寫它。

+2

+1我寧可期待如果只有@ika會刪除他的所有代碼並使用vanilla控件,那麼通過鼠標拖動進行多選可以簡單地工作 –