А имеют дерево: ROOT - VirtualStringTree (Вы не видите его, TVirtualStringTree.RootNode)VitrtualStringTree. Как перетащить на уровень ROOT?
- My Root Node 1
- My Root Node 2
- - Second node 1
- - Second node 2
- - Second node 3
- My Root Node 3
Я drag'n'drop "Мой корневой узел 3" для любого видимого узла, но я не может вернуть его в положение defaut, до корневого уровня дерева.
Я стараюсь, что:
//Part of code from OnDragDrop Event of VirtualStringTree
if (Sender.DropTargetNode = Sender.RootNode) then
begin
for i := 0 to high(Nodes) do
begin
LinksTree.MoveTo(Nodes[i], Sender.DropTargetNode, Attachmode, False);
end;
end;
Я не помещает курсор в никуда, но ничего не происходит. В DragOver я принял drop to root, если DropTarget является VST.RootNode.
Кто-нибудь знает, как удалить узел в VST.RootNode, если я перетаскиваю мышь в пустое пространство компонента?
Предположим, вы уронили «Корневой узел 3» на «Корневой узел 1» и установите 'AttachMode' в' amInsertBefore' это будет перемещаться в корень. добавьте 'toShowDropmark' в' PaintOptions', чтобы увидеть метку падения. Моя логика такова: если 'Mode' (' TDropMode') является 'dmAbove', я устанавливаю' AttachMode: = amInsertBefore'; 'dmOnNode -> amAddChildLast'; 'dmBelow -> amInsertAfter'. – kobik
@kobik, падение до пустого места указывается режимом drop 'dmNowhere', и многие примеры показывают назначение режима amNoWhere в режиме attach. И это будет так, я думаю, потому что вызов 'MoveTo' выглядит правильно. Вы можете перемещать узлы в 'RootNode' (или' nil', что означает то же самое), поэтому единственное, что я подозреваю, это неправильный режим присоединения. – TLama
@TLama, Да, я хотел упомянуть «amNoWhere», но вы были быстрее :) В любом случае я НЕ реализую 'amNoWhere' becouse. Я думаю, что неправильное поведение пользовательского интерфейса для перемещения узлов, когда нет видимых целевых узлов. – kobik