Главная страница
    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.042 c
6-1157020830
РВА
2006-08-31 14:40
2007.02.04
Добавить клиента


9-1138172592
игрок
2006-01-25 10:03
2007.02.04
Ragdoll Master


15-1168625185
Карелин Артем
2007-01-12 21:06
2007.02.04
Какие колонки сделать тыловыми, какие фронтальными?


15-1168654961
Tirael
2007-01-13 05:22
2007.02.04
цена прграммы


2-1168937219
Cara
2007-01-16 11:46
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский