Для ListView2 установим ViewStyle = vsSmallIcon и покажем, как вручную расставлять значки. В OnDragOver зададим условие
| 
 Code:  | 
| 
 Accept := (Sender = Source) and ([htOnLabel,htOnItem, htOnIcon] * ListView2.GetHitTestInfoAt(x, y) = []); // пересечение множеств должно быть пустым - запрещаем накладывать элементы  | 
а код в OnDragDrop очень простой:
| 
 Code:  | 
| 
 ListView2.Selected.SetPosition(Point(X,Y));  | 
Перетаскивание в TreeView - довольно любопытная тема, здесь порой приходится разрабатывать алгоритмы обхода ветвей для достижения желаемого поведения. Для TreeView1 разрешим перестановку своих узлов в другое положение. В OnDragOver проверим, не происходит ли перетаскивание узла на свой же дочерний во избежание бесконечной рекурсии:
| 
 Code:  | 
| 
 var Node, SelNode: TTreeNode; begin Node := TreeView1.GetNodeAt(x, y); // находим узел-приемник Accept := (Sender = Source) and (Node <> nil); if not Accept then Exit; SelNode := Treeview1.Selected; while (Node.Parent <> nil) and (Node <> SelNode) do begin Node := Node.Parent; if Node = SelNode then Accept := False; end;  | 
			
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!