Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
Рассмотрим процедуру Show_Only_Dir, которая и реализует изложен-
ный алгоритм. Процедура вызывается в обработчиках OnChange и OnExpanding. Вначале, процедура определяет полный путь к текущему ката-
логу, двигаясь снизу вверх от дочернего узла к родительскому и до корневого.
Затем запускается цикл поиска FindFirst – FindNext с помощью которо-
го находятся все подкаталоги текущего каталога. Вложенный цикл
FindFirst – FindNext позволяет определить, имеются ли у найденных подкаталогов вложенные подкаталоги. Этот внутренний цикл завершается, как только вложенный каталог найден, а его родитель помечается признаком
Node.HasChildren:= true.
Отметим еще, что перед вызовом процедуры Show_Only_Dir мы опера-
тором
Node.DeleteChildren
удаляем все потомки текущего узла, поскольку процедура заново формирует их.
Точно по такому же алгоритму сканируется корневой каталог в обработчике
OnCreate.
Вот, собственно и все! Осталось пояснить, для чего предназначена функция
Real_Directory().
Как известно, в каждом каталоге имеются две особые записи. Одна из них обозначается просто точкой и является ссылкой на текущий каталог, а вторая запись, обозначаемая двумя точками (по стандарту так и читается точка-точка)
является ссылкой на родительский каталог. Функции FindFirst–FindNext
их находят и идентифицируют как каталоги. Но, обычно, в дереве каталогов их не принято показывать. Поэтому функция Real_Directory()проверяет, не является ли имя найденного каталога точкой или точкой-точкой и возвращает