Поиск по дереву TTreeView в Delphi
Небольшая, но полезная функция, думаю будет полезна многим, кто использует в своих программах разветвленные структуры данных и компонент TTreeView. У меня, правда, установлен TRzTreeView, но в данном случае разницы никакой не будет. Итак, у меня стоит задача поиска элемента по дереву. Использую я следующую функцию
function Search(Tree: TRzTreeView; Target: string): integer;
var
Noddy: TTreeNode;
Searching: boolean;
I: Integer;
begin
I := -1;
Noddy := Tree.Items[0];
Searching := true;
while (Searching) and (Noddy <> nil) do
begin
if Noddy.Text = Target then
begin
Searching := false;
Tree.Selected := Noddy;
Tree.SetFocus;
end
else Noddy := Noddy.GetNext;
Inc(I);
end;
result := I
end;
Здесь поиск происходит по всему дереву и функция возврещает порядковый номер элемента, начиная с самого корня. Если ничего не найдено, то функция вернет -1.
Иногда мне треуется искать не по всему дереву, а только на каком-нибудь определнном уровне. У узлов дерева TTreeNode есть свойство уровень Level, которое и определяет уровень вложенности узла. Модифицируем нашу функцию следующим образом.
function Search(Tree: TRzTreeView; Noddy: TTreeNode;
Target: string): integer;
var
Searching: boolean;
I: Integer;
begin
I := 0;
Searching := true;
while (Searching) and (Noddy <> nil) do
begin
if Noddy.Text = Target then
begin
Searching := false;
Tree.Selected := Noddy;
Tree.SetFocus;
end
else
begin
Noddy := Noddy.getNextSibling;
inc(I)
end;
end;
result := I
end;
В результате получим индекс относительно первого элемента, который находится в заданной ветке дерева.

06 Янв 2010 в 15:03
)))))))))) я вам не могу поверить