206______________________________________________Глава 3

По умолчанию все перечисленные опции, кроме ofHideReadOnly, выключены.
Но, как видно из их описания, многие из них полезно включить перед вызовом
диалогов.

Если вы разрешаете с помощью опции множественный выбор файла, то список
выбранных файлов можно прочитать в свойстве Files типа TStrings.

При включении опции ofOldStyleDialog диалог приобретает вид, представлен-
ный на рис. 3.39. Помимо включенной опции ofOldStyleDialog в этом примере за-
данно значение свойства Title и этот текст отображается в заголовке окна. Кроме
того, в данном примере выключена опция ofHideReadOnly, что привело к появле-
нию индикатора Только чтение.

В компонентах диалогов открытия и сохранения файлов предусмотрена воз-
можность обработки ряда событий. Такая обработка может потребоваться, если
рассмотренных опций, несмотря на их количество, не хватает, чтобы установить
все диктуемые конкретным приложением ограничения на выбор файлов. Событие
OnCanClose возникает при нормальном закрытии пользователем диалогового окна
после выбора файла. При отказе пользователя от диалога — нажатии кнопки От-
мена, клавиши Esc и т.д. событие OnCanClose не наступавт. В обработке события
OnCanClose вы можете произвести дополнительные проверки выбранного пользо-
вателем файла и, если по условиям вашей задачи этот выбор недопустим, вы може-
те известить об этом пользователя и задать значение false передаваемому в обра-
ботчик по ссылке параметру CanClose. Это не позволит пользователю закрыть диа-
логовое окно.

Можно также написать обработчики событий OnFolderChange — изменение
каталога, OnSelectionChange — изменение имени файла, OnTypeChange — изме-
нение типа файла. В этих обработчиках вы можете предусмотреть какие-то сооб-
щения пользователю.

Теперь приведем примеры использования диалогов OpenDialog и SaveDialog.
Пусть ваше приложение включает окно редактирования RichEditI, в которое по
команде меню Открыть вы хотите загружать текстовый файл, а после каких-то из-
менений, сделанных пользователем, — сохранять по команде Сохранить текст в том
же файле, а по команде Сохранить как... — в файле с другим именем.

Вы вводите на форму компоненты — диалоги OpenDialog и SaveDialog, остав-
ляя их имена по умолчанию — OpenDialogI и SaveDialogl. Поскольку после чте-
ния файла вам надо запомнить его имя, чтобы знать под каким именем потом его
сохранять, вы можете определить для этого имени переменную, назвав ее, напри-
мер, FName. Для этого в заголовочном файле .h модуля в классе формы в разделе
private объявляете эту переменную:

AnsiString FName;

Тогда обработка команды Открыть может сводиться к следующему оператору:

if (OpenDialogl->Execute())
(

FName = OpenDialogl->FileName;

RichEditl->Lines->LoadFromFile(OpenDialogl->FileName) ;"
}

Этот оператор вызывает диалог, проверяет, выбрал ли пользователь файл
(если выбрал, то функция Execute возвращает true), после чего имя выбранного
файла (OpenDialogI ->FileName) сохраняется в переменной FName и файл загру-
жается в текст RichEditI методом LoadFromFile.

Обработка команды Сохранить выполняется оператором

RichEditl->Lines->SaveToFile(FName) ;

В данном случае нет необходимости обращаться к какому-то диалогу, посколь-
ку имя файла известно: оно хранится в переменной FName.