![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TTreeView - список потомков узла. [D7, XP]
Wood © (2007-01-16 16:56:00)Добрый день. Помогите, плз, как узнать, к примеру, абсолютные индексы всех потомков одного корневого узла дерева. Как быстро перебрать все узлы всего дерева я знаю, а вот отдельного узла затрудняюсь.
Спасибо.
Wood (2007-01-17 09:37:00) [1]я сделал по другому, возможно есть недостаток:
Varendlev: boolean;
...
endlev:=False;
IfCurItem.Count=0 then
begin
List.Add(IntToStr(CurItem.AbsoluteIndex));
end else
begin
CurItem:= CurItem.GetNext;
repeat
ifCurItem= nil then endlev:=True else
ifCurItem.Level=0 then endlev:=True else
begin
List.Add(IntToStr(CurItem.AbsoluteIndex));
CurItem:= CurItem.GetNext;
end;
until(endlev=True);
end;
...
Wood (2007-01-17 09:30:00) [2]спасибо, begin...end ©...!
begin...end (2007-01-17 09:27:00) [3]> 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 02:59:00) [4]
> begin...end © (16.01.07 19:36) [6]
Допустим, рекурсия.... Как остановиться? Когда закончится проверка всего selected
begin...end (2007-01-16 19:36:00) [5]> Wood (16.01.07 17:11) [2]
> Но мне надо узнать все дочерние узлы только выбранного (Selected)
TreeView.Selected.GetFirstChild/GetNextChild.
А если нужно знать не только "сыновей" выбранного узла, но и "внуков", "правнуков" и т.д., повторять то же самое для каждого найденного дочернего узла. Рекурсия, тоиссь.
Wood (2007-01-16 18:51:00) [6]Хорошо... если бы я знал как найти последний корневой узел в дереве, то можно было б осуществлять проверку: если последнй узел, то пока TTreeNode<> nil....
Wood (2007-01-16 18:34:00) [7]млин, еще опечатка не TTreeView.Selectedа TreeView.Selected
Ребят, как мне дойти от одного корневого узла до другого с проверкой всех дочерних, при этом еще не попасть в AV c CurItem=nil
Wood (2007-01-16 17:13:00) [8]Lis.Add(IntToStr(CurItem.AbsoluteIndex));
опечатка, прошу прощения... пишу прям здесь
List.Add, конечно...
Wood (2007-01-16 17:11:00) [9]
> 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)
mfender (2007-01-16 17:02:00) [10]TTreeNone.AbsoluteIndex, очевидно.