Форум: "Начинающим";
Текущий архив: 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