Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Компоненты и Классы , TTreeView



Автор: Lipskiy
WEB-сайт: http://delphibase.endimus.com

{ **** 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;

Функция Delphi, именуемая GetNodeInPath, которая извлекает узел в контроле TTreeView по его пути с использованием указанного символа разделителя. Функция принимает три параметра:

  • Path: путь к узлу как строка
  • Separator: символ разделителя, используемый в пути (например, \)
  • TreeView: контрол TTreeView, содержащий узлы

Функция возвращает найденный узел по указанному пути или nil, если такого узла не существует.

Следующий шаг за шагом функции:

  1. Создается объект TStringList для хранения уровней пути.
  2. Заменяются все вхождения символа разделителя в пути на символ новой строки (#13#10) с помощью функции StringReplace. Это делается для упрощения разбора пути на отдельные уровни.
  3. Установляется текстовое свойство объекта TStringList на модифицированный путь.
  4. Инициализируется объект TTreeNode для хранения текущего узла, начиная с корневого узла (TreeView.Items[0]).
  5. Проходит по каждому уровню пути с помощью цикла for.
  6. Для каждого уровня ищется узел с текстовым свойством, соответствующим текущему уровню, используя цикл while. Если такого узла не найдено, функция выходит из цикла и возвращает nil.
  7. Если найден соответствующий узел, устанавливается текущий узел на его дочерний узел (если есть) и продолжается обработка пути.
  8. Когда все уровни пути будут обработаны, освобождается объект TStringList и возвращается финальный узел.

Пример использования функции показывает, как использовать ее с обработчиком события Button1Click:

procedure TForm1.Button1Click(Sender: TObject);
begin
  TreeView1.Selected := GetNodeInPath('Каталог\Подкаталог', '\', TreeView1);
end;

В этом коде узел "Подкаталог" будет выбран в контроле TreeView1, если он существует под родительским узлом "Каталог".

Функция GetNodeInPath получает узел TTreeNode в дереве TreeView по указанному пути, разделенному символом Separator.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TTreeView ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-08-17 14:43:22/0.0034248828887939/0