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.