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

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

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение узла в TreeView по пути заголовков
Функция выдает узел TTreeNode из дерева TreeView, находящийся по пути,
указанному в Path, в котором разделителем уровней является символ Separator.
Если узел не найден - выдается nil.
Ограничение - заголовки узлов дерева не должны содержать символа Separator.
Зависимости: ComCtrls, Classes, SysUtils
Автор: lipskiy, <a href="mailto:lipskiy@mail.ru">lipskiy@mail.ru</a>, 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.getSibling;
  // Нода не найдена
  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;

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...