procedure TForm1.GetDirectories(Tree: TTreeView; Directory: string;
Item: TTreeNode; IncludeFiles: Boolean);
var
SearchRec: TSearchRec;
ItemTemp: TTreeNode;
begin
Tree.Items.BeginUpdate;
if Directory[Length(Directory)] <> '\' then Directory := Directory + '\';
if FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0 thenbeginrepeatif (SearchRec.Attr and faDirectory = faDirectory) and
(SearchRec.Name[1] <> '.') thenbeginif (SearchRec.Attr and faDirectory > 0) then
Item := Tree.Items.AddChild(Item, SearchRec.Name);
ItemTemp := Item.Parent;
GetDirectories(Tree, Directory + SearchRec.Name, Item, IncludeFiles);
Item := ItemTemp;
endelseif IncludeFiles thenif SearchRec.Name[1] <> '.' then
Tree.Items.AddChild(Item, SearchRec.Name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
Tree.Items.EndUpdate;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Node: TTreeNode;
Path: string;
Dir: string;
begin
Dir := 'c:\temp';
Screen.Cursor := crHourGlass;
TreeView1.Items.BeginUpdate;
try
TreeView1.Items.Clear;
GetDirectories(TreeView1, Dir, nil, True);
finally
Screen.Cursor := crDefault;
TreeView1.Items.EndUpdate;
end;
end;
Программный код на Delphi, предназначенный для заполнения контрола TTreeView списком директорий и файлов из указанной директории. Рассмотрим, как работает этот код:
Процедура GetDirectories - рекурсивная функция, которая проходит по дереву директорий начиная от указанной директории Directory. Она использует функции FindFirst и FindNext, чтобы перечислить файлы и поддиректории в текущей директории.
Если найдена директория, процедура добавляет элемент в контрол TTreeView с именем директории как текстом. Затем она рекурсивно вызывает себя для каждого поддиректория.
Если найден файл и параметр IncludeFiles установлен в True, процедура добавляет элемент в контрол TTreeView с именем файла как текстом.
Событийный обработчик кнопки Button1Click очищает контрол TTreeView, устанавливает курсор в виде часовы (Screen.Cursor := crHourGlass) и вызывает процедуру GetDirectories, чтобы заполнить дерево просмотра директорий и файлов из указанной директории. Затем он сбрасывает курсор в стандартное состояние (Screen.Cursor := crDefault).
Шаг за шагом, как работает код:
Событийный обработчик кнопки Button1Click вызывается при клике по кнопке.
Он очищает контрол TTreeView с помощью TreeView1.Items.Clear.
Он устанавливает курсор в виде часовы (Screen.Cursor := crHourGlass) и начинает обновление элементов дерева просмотра (Treeview1.Items.BeginUpdate).
Он вызывает процедуру GetDirectories, передавая контрол TTreeView, путь директории ('c:\temp'), null-значение для родительского узла (поскольку мы начинаем с корневого уровня) и устанавливает параметр IncludeFiles в True.
Если возникает исключение при выполнении процедуры GetDirectories, оно будет поймано блоком finally и курсор будет сброшен в стандартное состояние (Screen.Cursor := crDefault) перед окончанием обновления элементов дерева просмотра (Treeview1.Items.EndUpdate).
В целом, этот код предоставляет удобный способ отображения директорий и файлов в контроле TTreeView.
В статье описывается функция GetDirectories для отображения директорий в TTreeView, которая рекурсивно просматривает директорию и поддиректорию, включая файлы, и добавляет их в список TreeNode.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.