Главная страница
    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.046 c
5-1147756149
Konnor
2006-05-16 09:09
2007.02.04
Combo+TreeView


3-1163071864
john81
2006-11-09 14:31
2007.02.04
Какие компоненты можно использовать для FoxPro-шной БД?


2-1169104807
Glivera
2007-01-18 10:20
2007.02.04
Вопрос по SynEdit


2-1168541973
Volfram
2007-01-11 21:59
2007.02.04
InDy 10, ReadBytes


15-1168892349
Pasha L
2007-01-15 23:19
2007.02.04
Достать Демки Инди





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский