Вниз
Скачать: CL | DM;

TTreeView - список потомков узла.   Найти похожие ветки 

← →
Wood   (2007-01-16 16:56) [0]

Добрый день. Помогите, плз, как узнать, к примеру, абсолютные индексы всех потомков одного корневого узла дерева. Как быстро перебрать все узлы всего дерева я знаю, а вот отдельного узла затрудняюсь.
Спасибо.


← →
mfender ©   (2007-01-16 17:02) [1]

TTreeNone.AbsoluteIndex, очевидно.


← →
Wood   (2007-01-16 17:11) [2]


> mfender ©   (16.01.07 17:02) [1]

нет, проблема в переборе... Видимо, я не понятно сформулировал вопрос. :(

К примеру,
перебираю все узлы дерева:

...
Var  CurItem: TTreeNode;
     List: TstringList;
begin
List:=TStringList.Create;
try
  CurItem:= TTreeView.Selected; // или TTreeView.Items.GetFirstNode; если    
                                            //начинаю перебор с первого узла
  while CurItem <> nil do
    begin
      Lis.Add(IntToStr(CurItem.AbsoluteIndex));
      CurItem:= CurItem.GetNext;
    end;
  finally
   List.Free;
  end;
end;

Но мне надо узнать все дочерние узлы только выбранного (Selected)


← →
Wood   (2007-01-16 17:13) [3]

Lis.Add(IntToStr(CurItem.AbsoluteIndex));
опечатка, прошу прощения... пишу прям здесь
List.Add, конечно...


← →
Wood   (2007-01-16 18:34) [4]

млин, еще опечатка не TTreeView.Selected а TreeView.Selected
Ребят, как мне дойти от одного корневого узла до другого с проверкой всех дочерних, при этом еще не попасть в AV c CurItem=nil


← →
Wood   (2007-01-16 18:51) [5]

Хорошо... если бы я знал как найти последний корневой узел в дереве, то можно было б осуществлять проверку: если последнй узел, то пока TTreeNode<> nil....


← →
begin...end ©   (2007-01-16 19:36) [6]

> Wood   (16.01.07 17:11) [2]
> Но мне надо узнать все дочерние узлы только выбранного (Selected)

TreeView.Selected.GetFirstChild/GetNextChild.

А если нужно знать не только "сыновей" выбранного узла, но и "внуков", "правнуков" и т.д., повторять то же самое для каждого найденного дочернего узла. Рекурсия, тоиссь.


← →
Wood   (2007-01-17 02:59) [7]


> begin...end ©   (16.01.07 19:36) [6]

Допустим, рекурсия.... Как остановиться? Когда закончится проверка всего selected


← →
begin...end ©   (2007-01-17 09:27) [8]

> Wood   (17.01.07 02:59) [7]

> Как остановиться?

Если у дочернего узла сыновей нет (GetFirstChild для него возвращает nil), значит, в этой "ветке" дальше делать нечего.

procedure ShowChilds(Node: TTreeNode);
var
 Child: TTreeNode;
begin
 Child := Node.GetFirstChild;
 while Assigned(Child) do
 begin
   ShowMessage(Child.Text);
   ShowChilds(Child);
   Child := Node.GetNextChild(Child)
 end;
end

Вызов: ShowChilds(TreeView.Selected).


← →
Wood   (2007-01-17 09:30) [9]

спасибо, begin...end ©...!


← →
Wood   (2007-01-17 09:37) [10]

я сделал по другому, возможно есть недостаток:

Var endlev: boolean;
...
 endlev:=False;
   If CurItem.Count=0 then
     begin
      List.Add(IntToStr(CurItem.AbsoluteIndex));
     end  else
       begin
         CurItem:= CurItem.GetNext;
          repeat
           if CurItem=nil then  endlev:=True else
             if CurItem.Level=0 then  endlev:=True else
             begin
               List.Add(IntToStr(CurItem.AbsoluteIndex));
               CurItem:= CurItem.GetNext;
             end;
          until (endlev=True);
       end;
...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.027 c
6-1156909299
ZLOFENIX
2006-08-30 07:41
2007.02.04
посылка данных


15-1168873817
pasha_golub
2007-01-15 18:10
2007.02.04
Адрес веб-интерфейса для регистрации Турбо Делфай Проф


2-1168554549
Infinityx93
2007-01-12 01:29
2007.02.04
Динамический массив


15-1168765710
&amp;#65207;&amp;#65204;
2007-01-14 12:08
2007.02.04
Тест - Как постить в журнал (6)?


15-1168702443
u22
2007-01-13 18:34
2007.02.04
Подчеркивание букв на кнопках.




   Наверх