Помимо законченных диалогов работы с файлами, в Delphi имеется ряд компонентов, представляющих собой фрагменты диалогов: выпадающие списки дисков (драйверов) — DriveComboBox и фильтров (масок) файлов — FilterComboBox, списки каталогов — DirectoryListBox и файлов — FileListBox, дерево каталогов — DirectoryOutline. Внешний вид этих компонентов вы можете увидеть на рис. 8.7. Компоненты работы с файловой системой облегчают вам создание собственных диалоговых окон, что нередко требуется. Например, вы можете захотеть включить в диалоговое окно отображение каких-то характеристик файлов (размера, даты создания и т.д.) или оперативный просмотр содержания текстовых файлов. Тогда вам очень пригодятся готовые компоненты работы с файлами. Правда, все они, кроме DirectoryOutline, предназначены в основном для Delphi 1 и в последующих версиях Delphi расположены на странице Win3.1
палитры компонентов. Это значит, что они не рекомендуются для 32-разрядных приложений. Но, во-первых, у вас остается компонент DirectoryOutline. Кроме того, никто не запрещает вам все-таки использовать и остальные компоненты в любых приложениях Delphi. И, наконец, если уж вы хотите четко следовать рекомендации не использовать первые четыре фрагмента диалогов в 32-разрядных приложениях, вы можете разработать свои аналогичные компоненты, используя обычный компонент ComboBox.
Рис. 8.7 Компоненты — фрагменты диалогов |
Начнем рассмотрение компонентов работы с файловой системой с компонента DriveComboBox — выпадающего списка дисков (драйверов). При размещении на форме этот компонент автоматически отображает список имеющихся на компьютере дисков. Во время выполнения приложения вы можете прочитать имя выбранного пользователем диска в свойстве Drive, а строку, содержащуюся в окне списка — в свойстве Text.
Свойство TextCase задает регистр отображения: tcUpperCase — в верхнем регистре, tcLowerCase — в нижнем.
Связать компонент DriveComboBox со списком каталогов, отображаемых компонентом DirectoryListBox, можно во время проектирования через свойство DirList компонента DriveComboBox. Это свойство может указывать на компонент типа DirectoryListBox. Можно обеспечить связь этих двух типов компонентов и программно, включив в обработчик события OnChange компонента DriveComboBox оператор
DirectoryListBox1.Drive := DriveComboBox1.Drive;
Этот оператор задает имя диска, выбранное пользователем в компоненте DriveComboBox1, свойству Drive списка каталогов DirectoryListBox1.
Аналогичным оператором можно обеспечить связь компонента DriveComboBox с деревом каталогов и файлов в компоненте DirectoryOutline:
DirectoryOutline1.Drive := DriveComboBox1.Drive;
Рассмотрим теперь выпадающий список фильтров — компонент FilterComboBox. Его основное свойство — Filter, которое задается так же, как в описанных ранее диалогах. К отдельным частям фильтра — тексту и маске, можно получить доступ через свойства Text и Mask соответственно. Связь компонента со списком файлов типа TFileListBox можно установить, задав свойство FileList.
Компонент DirectoryListBox отображает список каталогов диска, заданного свойством Drive. Значение этого свойства можно установить программно во время выполнения. Как уже говорилось выше, связь этого свойства с выбранным пользователем диском в компоненте DriveComboBox устанавливается или программно, или с помощью свойства DirectoryListBox компонента DriveComboBox.
Связь списка каталогов с компонентом типа TFileListBox, отображающим список файлов, осуществляется с помощью свойства FileList. Можно также использовать результаты выбора пользователем каталога, читая свойство Directory в обработчике события OnChange.
С компонентом DirectoryListBox можно также связать метку типа Label. В этой метке будет отображаться путь к текущему каталогу. Если путь не умещается в метке, он автоматически отображается в сокращенном виде (см. рис. 8.7) с помощью функции MinimizeName. Метка, отображающая каталог, указывается в свойстве DirLabel.
Список файлов содержится в компоненте FileListBox. Его свойства Drive, Directory и Mask определяют соответственно диск, каталог и маску файлов. Эти свойства можно устанавливать программно или связывая описанным ранее способом компонент FileListBox с компонентами DriveComboBox, DirectoryListBox и FilterComboBox. Свойство FileType позволяет включать в список не все файлы, а только те, которые имеют соответствующие атрибуты. Свойство FileType представляет собой множество, указывающее типы включаемых файлов. Элементы этого множества могут иметь значения: ftReadOnly — только для чтения, ftHidden — невидимые, ftSystem — системные, ftVoluimeID — обозначения дисков, ftDirectory — каталоги, ftArchive — архивные, ftNormal — не имеющие особых атрибутов.
Свойство ShowGlyphs разрешает или исключает показ пиктограмм файлов (в примере рис. 8.7 это свойство = true).
Свойство MultiSelect разрешает выбор нескольких файлов.
Основное свойство, в котором можно прочитать имя выбранного пользователем файла — FileName.
Со списком файлов может быть связано окно редактирования Edit, в котором отображается выбранный файл (см. окно над списком файлов на рис. 8.7). На этот список указывает устанавливаемое во время проектирования свойство FileEdit.
Теперь рассмотрим компонент DirectoryOutline, содержащий дерево каталогов. В этом компоненте значение диска устанавливается свойством Drive. Текущий каталог, выбранный пользователем, можно прочитать в свойстве Directory. Свойство TextCase определяет стиль отображения имен каталогов: tcLowerCase — преобразование к нижнему регистру, tcUpperCase — к верхнему, tcAsIs — без преобразования (этот режим использован в примере рис. 8.7). Остальные свойства идентичны компоненту OutLine, на основе которого построен данный пример. Вы можете найти исходный текст этого примера в каталоге ...\source\samples.