...

Листинг 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).

Загрузка...