Листинг 4.30.
Загрузка содержимого каталога
procedure TForm3.treeExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
strFolder: String;
subfolders: TStrings;
i: Integer;
item: TTreeNode;
begin
if not IsExpanded(Node) then
//Содержимое каталога нужно зачитать
SetExpanded(Node, True)
else
begin
//Список подкаталогов для выделенного каталога
//был составлен ранее
AllowExpansion := True;
Exit;
end;
//Составление списка подкаталогов
strFolder := NodeToFolderPath( Node );
subfolders := TStringList.Create;
if SearchInFolder(strFolder, \'*\', FILE_ATTRIBUTE_DIRECTORY,
subfolders)
then begin
//Добавим в дерево элементы, соответствующие подкаталогам
for i := 0 to subfolders.Count – 1 do
begin
item := tree.Items.AddChild(Node, subfolders[i]);
item.ImageIndex := 1;
item.SelectedIndex := 2;
SetExpanded(item, False); //Содержимое подкаталога еще
//не прочитано
end;
AllowExpansion := True;
end
else
//В каталоге нет подкаталогов
AllowExpansion := False;
subfolders.Free;
end;
В листинге 4.30 для определения пути каталога, заданного элементом дерева, используется функция NodeToFolderPath. Реализуется она совсем несложно (листинг 4.31).