Warum so kompliziert? Nimm dein Demo-Projekt und ersetze den OnDragDrop-Event mit diesem Code (die LVM_ARRANGE Message im FormCreate kannst du weglassen):
Delphi-Quellcode:
var
CurrentItem: TListItem;
begin
if Sender = Source then begin
CurrentItem := TListView(Sender).Selected;
if CurrentItem <> nil then begin
CurrentItem.SetPosition(Point(X, Y));
end;
end;
end;