Как получить узел в TTreeView по пути заголовков?
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 ( Path = '' ) or
( TreeView.Items.Count = 0 ) 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; |