Листинг 4.28.
Установка состояния элемента дерева
procedure TForm3.SetExpanded(Node: TTreeNode; isExpanded: Boolean);
begin
if isExpanded then
begin
//Подготавливаем элемент к загрузке содержимого каталога
Node.Data := Pointer(1);
Node.DeleteChildren;
end
else
begin
//Содержимое каталога не прочитано (или его следует обновить)
Node.Data := Pointer(0);
Node.Collapse(False);
Node.DeleteChildren;
tree.Items.AddChild(Node, \'\'); //Фиктивный элемент(чтобы
//отображался "+", позволяющий
//развернуть элемент)
end;
end;
Если после создания элементов дерева процедура SetExpanded вызывается с параметром isExpanded, равным False (как в листинге 4.27), то для переданного в процедуру элемента дерева создается фиктивный дочерний элемент. Это делается для того, чтобы не зачитывать содержимое каждого не развернутого еще элемента дерева (для папок с большим количество файлов программа будет сильно «тормозить»). А так у каждого еще не развернутого элемента отображается символ +, позволяющий развернуть его в нужный момент. При этом не нужно забывать удалять созданный фиктивный элемент дерева (что и делает SetExpanded с параметром isExpanded, равным True).
Каждый не развернутый еще элемент дерева помечается значением поля Node. Data, равным 0. Каждый элемент, содержимое которого уже прочитано с диска, помечается значением поля Node. Data, равным 1. Для проверки, было ли прочитано содержимое каталога, соответствующего элементу дерева, используется простая функция IsExpanded (листинг 4.29).