Производится перетаскивание Item'ов между 2-мя TListView.
В момент начала перетаскивания (событие StartDrag) запоминается, какой Item хотим перетащить (TListView(Sender).Selected), после переноса DragDrop производим перенос.
Проблема в том, что в качестве перетаскиваемого не всегда определяется нужный Item, может попасть, например, следующий, над которым перетаскивали (при быстром перетаскивании).
Как точно определить Item, который перетаскиваем?
Код:
procedure TForm.LView1StartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
if LView1.Focused then
gDragItem:=LView1.Selected
else
gDragItem:=LView2.Selected;
end;
Код:
procedure TForm.LView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var lLI: TListItem;
begin
lLI:=TListView(Sender).Items.Add;
lLI.Caption:=gDragItem.Caption;
lLI.ImageIndex:=gDragItem.ImageIndex;
gDragItem.Delete;
TListView(Sender).SetFocus;
lLI.Selected:=true;
end;