Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.04;
Скачать: 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 вся ветка

Текущий архив: 2007.02.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
15-1168297801
TStas
2007-01-09 02:10
2007.02.04
Где IE хранить список посещенных ссылок?


15-1168860340
XTD
2007-01-15 14:25
2007.02.04
ОФФ:Borland.Delphi.2006.Enterprise


2-1169050030
Garacio
2007-01-17 19:07
2007.02.04
Выбор каталога с возможностью создания нового


2-1168802992
Kolan
2007-01-14 22:29
2007.02.04
Научите пользоваться resoursestring


8-1149685999
pm
2006-06-07 17:13
2007.02.04
VideoWindow не на главной форме