-1

MouseMove事件中,如果我的鼠标单击拖过它们,我需要在 Listview 中选择项目。但是,我的代码不起作用。当我单击并拖动时,只有我单击的第一个项目被选中。

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;
4

2 回答 2

2

TListView 有一个MultiSelect属性,在 Object Inspector 中检查,然后您可以通过鼠标拖动选择多个项目,您不需要自己编写代码。

于 2013-06-02T16:56:10.800 回答
0

首先,GetAsyncKeyState在单词的最高位返回“down”状态,所以你应该写类似GetAsyncKeyState(VK_BUTTON) and $8000 <> 0.

其次,使用GetAsyncKeyState鼠标按钮并不是一件好事,因为它会检查物理按钮(如果用户是左撇子并重新映射按钮,他会感到困惑,因为您的代码希望按下鼠标左键)。更好的方法是在事件中记住按下的鼠标按钮并在OnMouseDown事件中更新/重置它们OnMouseUp

于 2013-06-02T16:54:12.280 回答