Содержание материала

 

Для 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;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить