更改TListView中的选择后如何重置选择标记?

问题描述 投票:0回答:1

我在虚拟模式下有一个TListView,当我拖放项目时,我想将选择移动到新项目位置。我这样做清除选择,然后设置所需项目的选定。没关系,但是有问题。如果我按住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;
listview delphi delphi-2009
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.