Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Справочник по компонентам Delphi.doc
Скачиваний:
193
Добавлен:
02.05.2014
Размер:
1 Mб
Скачать

Работа с файловой системой

Зачастую возможностей стандартных диалогов (компоненты TOpenDialog и TSaveDialog) недостаточно для реалшации замыслов программиста. Во многих современных коммерческих приложениях перед открытием файла есть возмож­ность получить его характеристики и предварительно просмотреть содержимое. Чтобы дать разработчикам доступ к таким функциям, в библиотеку VCL были включены по отдельности и все составные части стандартного диалога — списки имен дисков, каталогов, файлов и фильтров расширений. Если уста­новить между ними взаимные ссылки, то они будут работать вместе, как в TOpenDialog, безо всякого дополнительного программирования. Вместе с тем, можно описать и специфическую реакцию на изменения этих списков.

Кроме того, в эту группу компонентов включен TDirectoryOutline — пример настройки компонента TOutline на конкретное приложение. Он отображает файловую структуру в виде дерева и также может работать в связке с осталь­ными компонентами этого раздела.

Компонент tDriveComboBox

TObject—”TPersistent—>TComponent—^TControl—>TWinControl->

->TCustornComboBox-”TDriveComboBox

Модуль FILECTRL

Страница Палитры компонентов System

Компонент представляет комбинированный список, содержащий информацию о имеющихся в системе устройствах. При инициализации приложения все они заносятся в этот список. Во время выполнения отображаются односимвольное имя устройства, метка в квадратных скобках и пиктограмма, соответствующая его типу (винчестер, сетевой диск, дисковод CD-ROM и т. п.):

TDriveType = (dtUnknown, dtNoDrive, dtFloppy, dtFixed, dtNetwork, dtCDROM, dtRAM) ;

К сожалению, функция, определяющая тип диска по его номеру или имени, недоступна программисту. Имеющаяся в API Windows функция GetDriveType не умеет распознавать dtCDROM и dtRAM и сообщает о них как о dtFixed.

Имя текущего диска соответствует значению свойства

property Drive: Char;

а имя с меткой (так, как это показывается в списке) — значению свойства:

property Text;

При этом текст метки может отображаться в верхнем или нижнем регистрах, в зависимости от значения свойства:

(Pb) property TextCase: TTextCase;

TTextCase = (tcLowerCase, tcUpperCase) ;

Пиктограмму типа диска можно получить, используя свойство списка Items.Objects — каждому устройству соответствует объект типа TBitmap.

Изменение текущего диска, как правило, должно повлечь за собой изменения в соответствующих списках каталогов и файлов. Для этого в обработчике собьщга

(Pb) property OnChange: TNotifyEvent;

нужно предусмотреть соответствующий код, например:

procedure TFormI.DriveComboBoxlChange(Sender: TObject);

begin

DirectoryListBoxl.Drive := DriveComboBoxl.Drive ;

end;

Существует и более простой путь для такого связывания. Достаточно связать компонент-список дисков с компонентом-списком каталогов, используя свой­ство:

(Pb) property DirList: TDirectoryListBox;

Все изменения первого будут автоматически отслеживаться вторым. Компонент

TDirectoryListBox

TObject-”TPersistent->TComponent—”TControl->TWinControl—>

—>TCustomListBox->TDirectoryListBox

Модуль FILECTRL

Страница Палитры компонентов System

Компонент представляет список каталогов на текущем устройстве.

Устройство задается свойством

property Drive: Char;

а текущий каталог на нем — свойством:

property Directory: string;

При помощи метода

function GetIternPath(Index: Integer): string;

можно получить строку, содержащую полный путь к каталогу. Все символы в ней приводятся к верхнему регистру. Параметр Index означает номер каталога в списке (начиная с 0).

Если список каталогов связать со статическим текстом (меткой), пользуясь свойством

(Р)э) property DirLabel: TLabel ;

то в ней также будет отображаться путь к текущему каталогу. При этом, если имя полного пути не помещается в метке, то оно показывается в сокращенном виде (см. функцию MinimizeName).

Метод

procedure OpenCurcent ;

открывает текущий каталог, заменяя прежнее содержимое списка списком его дочерних подкаталогов.

Наконец, обновление содержимого списка у этого компонента осуществляет метод:

procedure Update;

Связать список каталогов с компонентом-списком файлов можно, обрабатывая событие:

(РЬ) property OnChange: TNotifyEvent;

или присвоив указатель на последний свойству:

(РЫ property FileList: TFileListBox;

В свойстве Items.Objects списка для каждого его элемента хранится объект типа TBitmap (пиктограмма, представляющая собой открытую или закрытую папку в зависимости от состояния каталога), доступный для чтения и записи.

Соседние файлы в папке Delphi