Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.047 c
15-1168878434
властелин колхоза
2007-01-15 19:27
2007.02.04
MessageBox() из сервиса и стили WinXP


4-1158738392
Petrovitch
2006-09-20 11:46
2007.02.04
Доступ к ресурсу (диску)?


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


8-1149905507
Anonym
2006-06-10 06:11
2007.02.04
Выбор микрофона


3-1163575639
Артем_
2006-11-15 10:27
2007.02.04
Из MySQL в XML





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский