我在虚拟模式下有一个TListView
,当我拖放一个项目时,我想将所选内容移动到新的项目位置。我清除选择内容,然后将所需项目设置为Selected。可以,但是有问题。在发生这种情况之后,如果我按住shift并单击一个项目(如多重选择),则列表的行为就像选择的开始是之前选择的项目,而不是我选择的项目(使用Selected:= True)。
我尝试模拟点击,但是移动鼠标后出现访问冲突:
procedure TForm1.ListDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
List.Perform(WM_LBUTTONDOWN, MK_LBUTTON, $002E001E);
Sleep(10);
List.Perform(WM_LBUTTONUP, 0, $002E001E);
end;
答案 0 :(得分:3)
选择新项目后,还应将其设置为焦点。但是,更重要的是,您需要向ListView发送LVM_SETSELECTIONMARK
消息:
选择标记是从中开始多项选择的项目索引。
例如:
procedure TForm1.ListDragDrop(Sender, Source: TObject; X, Y: Integer);
var
Item: TListItem;
begin
...
Item := ...; // the list item after it has been moved to its new position...
Item.Selected := True;
Item.Focused := True;
List.Perform(LVM_SETSELECTIONMARK, 0, Item.Index);
List.Invalidate;
...
end;