18.5.1. TOpenDialog и TSaveDialog - диалоги открытия и сохранения файлов

Эти компоненты имеют идентичные свойства и поэтому рассматриваются вместе. Пример окна TOpenDialog показан на рис. 18.38.

Свойство FileName: string содержит маршрут поиска и выбранный файл при успешном завершении диалога. Программа может использовать это свойство для доступа к файлу с целью читать из него данные (TOpenDialog) или записывать в него (TSaveDialog). Замечу, что пользователь может ввести произвольное имя и, следовательно, указать несуществующий файл. Для записи это не имеет значения, но при чтении отсутствие файла может привести к краху программы. Чтобы избежать этого, можно проверить существование файла глобальной функцией FileExists, как это сделано в предыдущем примере, или использовать механизм обработки исключительных ситуаций.

Рис. 18.38 . Стандартное окно TOpenDialog

Свойство Filter: string используется для фильтрации (отбора) файлов, показываемых в диалоговом окне. Это свойство можно устанавливать с помощью специального редактора на этапе конструирования формы или программно, как это сделано в предыдущем примере. Для доступа к редактору достаточно щелкнуть по кнопке в строке Filter окна Инспектора объектов. При программном вводе фильтры задаются одной длинной строкой, в которой символы “|” служат для разделения фильтров друг от друга, а также для разделения описания фильтруемых файлов от соответствующей маски выбора. Например, оператор

OpenDialogI.Filter := 'Текстовые файлы|*.txt| Файлы Паскаля|*.раs';

задает две маски - для отбора файлов с расширениями раs и TXT.

Установить начальный каталог позволяет свойство InitialDir string. Например:

OpenDialogI.InitiaiDir := 'c:\program files\borland\delphi5\source';

С помощью свойства DefaultExt: String [ 3 ] формируется полное имя файла, если при ручном вводе пользователь не указал расширение. В этом случае к имени файла прибавляется разделительная точка и содержимое этого свойства.

В диалоговом окне для ручного ввода предусмотрен элемент TEdit, который при желании можно заменить на TCоmbовох. Для этого необходимо свойству FileEditStyle придать значение fsComboBox вместо умалчиваемого fsEdit. Если выбран комбинированный список, с ним можно связать протокол выбора имен. Для этого используется свойство HistoryList: TStrings, содержимое которого будет появляться в выпадающем списке. Этот список не пополняется автоматически, поэтому за его содержимым должна следить программа. Например:

if OpenDialogI.Execute then

begin

HistoryList.Add(OpenDialogI.FileName);

end;

Настройка диалога может варьироваться с помощью свойства

TOpenOption = (ofReadOnly, ofOverwritePrompt, ofHideReadOnly, ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect, ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCre-atePrompt, ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCre-ate, ofNoNetworkButton, ofNoLongNames, ofOldStyleDialog, of-NoDereferenceLinks) ;

TOpenOptions = set of TOpenOption;

property Options: TOpenOptions;

Значения этого свойства имеют следующий смысл:

ofReadOnly | Устанавливает переключатель Только для чтения
ofOverwritePrompt | Требует согласия пользователя при записи в существующий файл
ofHideReadOnly | Прячет переключатель Только для чтения
OfNoChangeDir | Запрещает смену каталога
ofShowHelp | Включает в окно кнопку Help
ofNoValidate | Запрещает автоматическую проверку правильности набираемых в имени файла символов
OfAllowMultiSelect | Разрешает множественный выбор файлов
ofExtensionDifferent | При завершении диалога наличие этого значения в свойстве options говорит о том, что пользователь ввел расширение, отличающееся от умалчиваемого
ofPathMustExist | Разрешает указывать файлы только из существующих каталогов
ofFileMustExist | Разрешает указывать только существующие файлы
ofCreatePrompt | Требует подтверждения для создания несуществующего файла
ofShareAware | Разрешает выбирать файлы, используемые другими параллельно выполняемыми программами
OfNoReadOnlyReturn | Запрещает выбор файлов, имеющих атрибут Только для чтения
ofNoTestFileCreate | Запрещает проверку доступности сетевого или локального диска
OfNoNetworkButton | Запрещает вставку кнопки для создания сетевого диска
ofNoLongNames | Запрещает использование длинных имен файлов
ofOldStyleDialog | Создает диалог в стиле Windows 3-х

Если разрешен множественный выбор, доступ к выбранным именам можно получить в свойстве Files: strings.