Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Получение узла в TTreeView по пути заголовков

01.01.2007
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение узла в TreeView по пути заголовков
 
Функция выдает узел TTreeNode из дерева TreeView, находящийся по пути,
указанному в Path, в котором разделителем уровней является символ Separator.
Если узел не найден - выдается nil.
Ограничение - заголовки узлов дерева не должны содержать символа Separator.
 
Зависимости: ComCtrls, Classes, SysUtils
Автор:       lipskiy, lipskiy@mail.ru, ICQ:51219290, Санкт-Петербург
Copyright:   Собственное написание (lipskiy)
Дата:        26 июня 2002 г.
***************************************************** }
 
function GetNodeInPath(Path: string; Separator: char; TreeView: TTreeView):
 
TTreeNode;
var
 
List: TStringList;
 
Node: TTreeNode;
  i
: integer;
  s
: string;
begin
 
Result := nil;
 
if (TreeView = nil) or (TreeView.Items.Count = 0) or (Path = '') or (Separator
   
= '') then
   
exit;
 
List := TStringList.Create;
 
// Меняем сепаратор на первод строки
  s
:= StringReplace(Path, Separator, #13#10,[rfReplaceAll]);
 
// Получаем список уровней
 
List.Text := s;
 
// Начинаем с нулевой ноды дерева
 
Node := TreeView.Items[0];
 
// Проходим по всему списку уровней пути
 
for i := 0 to List.Count - 1 do
 
begin
   
// Ищем имя ноды на текущем уровне
   
while (Node <> nil) and (Node.Text <> List[i]) do
     
Node := Node.getNextSibling;
   
// Нода не найдена
   
if Node = nil then
     
break;
   
// Переходим на уровень ниже
   
if i < List.Count - 1 then
     
Node := Node.getFirstChild;
 
end;
 
List.Free;
 
Result := Node;
end;
 
// Пример использования:
procedure TForm1
.Button1Click(Sender: TObject);
begin
  TreeView1
.Selected := GetNodeInPath('Каталог\Подкаталог', '\', TreeView1);
end;