TTreeView: Программное перемещение веток с детками

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
Lifter
новенький
Сообщения: 21
Зарегистрирован: 19.04.2012 02:17:24

TTreeView: Программное перемещение веток с детками

Сообщение Lifter »

Что-то я запутался.
Мне надо в компоненте TTreeView сделать по нажатию кнопок перемещение выделенной ветки (со всеми ее подветками) вверх / вниз в пределах ее родителя. Код ниже двигает только саму ветку (без подветок), и по всему дереву, а не в пределах родительской ветки.

Код: Выделить всё

procedure TTreeForm.btnUpClick(Sender: TObject);
var
  i : integer;
begin
  i:=TreeView1.Selected.AbsoluteIndex ; {определяем индекс выделенной ветки}
  if i<>0 then TreeView1.Selected.MoveTo(TreeView1.Items[i-1], naInsert);
end;

procedure TTreeForm.btnDownClick(Sender: TObject);
var
  i:integer;
begin
i:=TreeView1.Selected.AbsoluteIndex ;
if i<>TreeView1.Items.Count-1 then TreeView1.Items[i+1].MoveTo(TreeView1.Selected, naInsert);
end;

Есть ли простой способ (без рекурсии) переместить всю ветку с ее дочками вверх / вниз?
MylnikovDm
постоялец
Сообщения: 103
Зарегистрирован: 15.02.2007 20:26:10
Откуда: Челябинск

Сообщение MylnikovDm »

У каждого узла дерева есть свой список вложенных в него элементов. Двигайте свой элемент в этом списке, а не в общем списке всего дерева, и будет вам счастье.
У TTreeNode для этого есть procedure MoveTo(Destination: TTreeNode; Mode: TNodeAttachMode);
Ответить