![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пробег по элементам TreeView [D7, WinXP]
LedWorm © (2004-12-23 22:09:00)помогите пожалуйста решить проблему.
Имеется TreeView с большим числом элементов.
Нужно к каждому элементу добавить символ в названии.
Как можно пробежаться по всему дереву?
Уровень вложенности может быть очень большим.
Заранее благодарен.
LedWorm (2004-12-24 20:48:00) [1]Спасибо Джо. Все работает. Это то что было нужно.
Просто Джо (2004-12-24 02:49:00) [2]Э... ну, что-нибудь такое... рекурсивное...
type
// прототип callback-функции
TNodeCallback = procedure (ANode: TTreeNode);
// вызывает процедуру, указанную в CallBaclProc для каждого узла
// TTreeView; работает рекурсивно
procedureOnEachNode (ARoot: TTreeNode; CallBackProc: TNodeCallback);
var
I: Integer;
ANode: TTreeNode;
begin
CallBackProc (ARoot);
// перебираем рекурсивно всех детей
for I := 0 to ARoot.Count-1 do
OnEachNode (ARoot.Item[I],CallBackProc);
// запускаем рекурсию для следующего узла
// того же уровня, что и текущий
if ARoot.getNextSibling <> nil then
OnEachNode(ARoot.getNextSibling,CallBackProc);
end;
// это наша функция, которая будет что-нибудь делать с
// передаваемыми в нее узлами
procedureMyCallBack (ANode: TTreeNode);
begin
ANode.Text := ANode.Text + ' :-)' // ну вот, что-то сделали ;)
end;
procedureTForm1.Button1Click(Sender: TObject);
begin
// запускаем рекурсию с первого узла дерева,
// going down recursively... God save the stack!
OnEachNode(TreeView1.Items.GetFirstNode, MyCallBack);
end;
Ну или в таком духе...
AlterEgo of WondeRu (2004-12-23 23:00:00) [3]"рекурсия"! искать в яндексе!