Работа с компонентом TfrShellTreeView в FastReport VCL

21.04.2025

Не все знают, что внутри FastReport содержатся не только компоненты отчетов, но и многое другое. В частности, имеются несколько компонентов, которые можно применять в своих приложениях также, как и остальные компоненты Delphi. Библиотека таких компонентов постоянно пополняется. В данной статье мы рассмотрим один из таких компонентов, а именно – TfrShellTreeView. 

Этот компонент предназначен для отображения элементов файловой системы и частично является аналогом таких компонентов, как TDirectoryListBox, TDirectoryOutline в Delphi и TShellTreeView в Lazarus. Если вы хотите посмотреть его внешний вид не запуская IDE, то это то «дерево», которое вы видите слева в окне проводника.

Окно программы для исследования компонента TfrShellTreeView

 

Компонент отлично работает в операционных системах Windows и Linux для Delphi и Lazarus. Среда разработки FMX не поддерживается. 

TfrShellTreeView использует многие возможности операционной системы. Например, в Windows можно заходить в zip архивы как в папки, и даже манипулировать их содержимым: извлекать и добавлять файлы. Под Linux часть функциональности компонента может быть недоступна, в зависимости от установленной версии Linux. Важное примечание: отображение дерева и выбор элементов в нём будут доступны под любой ОС.

Основное свойство TfrShellTreeView, которое управляет взаимодействием с операционной системой, является OptionsShell.

Свойства, управляющие работой с деревом папок

 

  • ContextMenu – указывает нужно ли показывать системное контекстное меню для выбранного файла.
  • ShowFolder – это свойство отвечает за отображение папок.
  • ShowHidden – данное свойство обозначает будут или нет видны скрытые файлы.
  • ShowNonFolders – это свойство отвечает за отображение обычных файлов (не папок).
  • TrackShellChanges – данное свойство отвечает за реагирование на изменения в файловой системе. Если в компоненте будет открыта какая-то папка, то при её изменении (например, копировании в неё файла) в компоненте также автоматически будет добавлен узел, ссылающийся на этот файл.

TfrShellTreeView поддерживает набор горячих клавиш, характерных для стандартного файлового диалога или проводника в Windows (Ctrl+С, Ctrl+V, Delete и т.д.) со стандартными диалогами.

Также компонент TfrShellTreeView поддерживает Drag&Drop элементов файловой системы как внутри себя, так и из других (но не всех) файловых менеджеров. Для разрешения операций  Drag&Drop используется свойство OptionsBehavior.AllowDragDrop. Перетаскивание осуществляется с использованием функций операционной системы.

Остальные свойства аналогичны как в компонентах TTreeView и TfrTreeView. Однако стоит отметить, что они сгруппированы в группы по типу использования: OptionsBehavior, OptionsSelection, OptionsShell, OptionsView. Это позволит вам быстрее находить нужные свойства.

Как упоминалось выше, компонент предназначен для отображения файловой системы компьютера. По умолчанию компонент настроен на отображение корневой папки вашей системы: «Рабочий стол» в Windows или “/” в Linux. Однако возможности компонента этим не исчерпываются. 

Поместим компонент TfrShellTreeView на форму и откроем его редактор:

Редактор компонента

 

Редактор TfrShellTreeView внешне похож на редакторы компонентов TTreeView и TfrTreeView, но в нём имеются 2 новые кнопки: 

  • New shell Root Item.
  • New shell Root SubItem.

Как мы видим на скрине редактора в компоненте могут быть:

  • Обычные узлы, содержащие только текст, например «New simple item 1».
  • Узлы с местоположением в файловой системе, такие как «Этот компьютер», «Lazarus», «data». Такие узлы далее мы будем называть шелл-узлами. 

Обычные и дочерние узлы создаются и редактируются также, как и в обычных TreeViews. 

Узлы, которые имеют ссылку на элемент файловой структуры, создаются с помощью кнопок «New shell Root Item». Таким образом будет создан шелл-узел того же уровня, что и текущий. Если нажать на «New shell Root SubItem», то будет создан дочерний шелл-узел по отношению к текущему узлу.  Обратите внимание, что у шелл-узла нельзя создавать дочерние узлы, а у обычного узла – можно. 

Редактирование шелл-узлов сводится к указанию для какой папки привязан данный узел. Привязку к папке можно задать с помощью констант типа TfrRootNodes. Этими константами задаются такие места, как рабочий стол, автозагрузка и так далее. Если же задать константу rfCustomPath, то появляется возможность добавить путь к папке файловой системы в дереве каталогов ниже. Также этот путь можно задать с помощью окна редактирования, расположенного ниже дерева каталогов. Например, на скрине ниже задается путь к папке Lazarus, расположенной на диске C:\.

Редактирование шелл-ноды

 

Как и у обычного TreeView, обычным узлам компонента можно задавать иконки. Шелл-нодам иконки задавать нельзя, там используются иконки, заданные в операционной системе. Для узлов фактически используется индекс иконки, который добавляется в свойстве ImageIndex. Остальные индексы иконок не используются. Также из-за особенностей использования компонента не реализованы некоторые другие свойства. Например, отсутствует возможность множественного выбора элементов.

Самое часто используемое свойство – это конечно же TfrShellTreeView.SelectedPath. Если выбран шелл-узел, то это свойство содержит путь к папке, на которую указывает данный узел. Иначе это свойство равно пустой строке. 

Помимо этого, работа с компонентом доступна и программными способами. Добавить обычный (не шелл) узел можно такими же способами, что и обычный TTreeView. 

 frShellTreeView1.Items.Add(nil,Edit1.Text); 
//добавляем корневой узел с текстом из Edit1


Добавление узла к текущему выделенному узлу:

procedure TForm1.Button5Click(Sender: TObject);
var N:TfrShellTreeViewNode;
begin
 N:=(frShellTreeView1.Selected) as TfrShellTreeViewNode;
if N=nil then Exit;
 frShellTreeView1.Items.AddChild(N,Edit1.Text);
end;


Удалить узел также просто. Например, так удаляется текущий выделенный узел:

procedure TForm1.Button2Click(Sender: TObject);
var N:TfrShellTreeViewNode;
begin
 N:=(frShellTreeView1.Selected) as TfrShellTreeViewNode;
 if N=nil then exit;
 frShellTreeView1.Items.Delete(N);
end;

Впрочем, для удаления узла можно просто вызывать его метод Free.

К сожалению, в настоящее время компонент не поддерживает генерацию событий, происходящих в моменты изменения связанных с ним папок файловой системы. Остальная функциональность компонента во многом совпадает со стандартным TreeView. 

В заключение можно сказать, что FastReport — это не только инструмент для создания отчётов, но и источник дополнительных компонентов, которые можно использовать в приложениях на Delphi. TfrShellTreeView — предоставляет удобный способ отображения элементов файловой системы и может быть полезен в различных проектах. Библиотека компонентов FastReport постоянно пополняется, что делает этот инструмент ещё более привлекательным для разработчиков.

VCL FastReport Delphi Интерактивность RAD Studio
24 апреля 2025

Как открыть и конвертировать файл FP3 с помощью МоиОтчеты Конвертер

Рассказываем о формате FP3, который используется для готовых отчётов в бизнес-приложениях, и о возможности конвертировать такие файлы в различные форматы с помощью МоиОтчеты Конвертер.
21 апреля 2025

Работа с форматами XML и JSON в FastScript

В этой статье мы подробнее рассмотрим, как работать с JSON и XML в FastReport, увидим какие в них есть свойства и методы, а также построим отчеты из кода со скриптами.
21 апреля 2025

Как работают RFID-метки в FastReport VCL

В этой статье мы рассмотрим принцип работы RFID-меток с новым объектом TfrxDeviceCommand в FastReport VCL с релизом 2025.2.