Компонент OpenDialog служит для открытия указанного файла и загрузки данных. Компонент SaveDialog, соответственно, необходим для сохранения данных в файл. Все свойства у компонентов идентичны, но немного отличаются только по смыслу назначения.
Свойство FileName
Является основным свойством компонентов OpenDialog и SaveDialog, которое возвращает пользовательский файл FileName в виде строки. Можно задать значение свойства перед обращением к диалогу, в этом случае, при появлении окна загрузки/сохранения файла будет задано имя файла по умолчанию.
Свойство Filter
Указывает какие типы файлов можно загружать в приложение или в какие типы файлов приложение будет сохранять данные. Во время программирования следует указывать параметры свойства Filter, чтобы ограничить компонентам OpenDialog и SaveDialog диапазон типов файлов. Чтобы открыть окно редактора, следует нажать на многоточие рядом со свойством Filter в окне «Инспектор объектов». В столбце FilerName указывается название типов файлов, которое будет отображаться в выпадающем списке. В столбце Filter указывается тип файлов.
Также значение свойства можно задавать программно для компонента OpenDialog или SaveDialog.
Пример создания фильтра
OpenDialog1->Filter = "Текстовые (*.txt, *.doc)|*.txt; *.doc|Bсе файлы|*.*";
Каждый тип файлов разделяется точкой с запятой, а название файла с типом разделяются вертикальной линией.
Свойство FilterIndex
Задаёт для компонента OpenDialog или SaveDialog какой фильтр будет отображаться по умолчанию. Свойство FilterIndex удобно использовать, когда указан не один фильтр типов файлов, а несколько, и чтобы вручную не переписывать все. Так гораздо удобнее, указав значение FilterIndex = 1, в этом случае по умолчанию будет показан первый фильтр по списку.
Свойство InitialDir
Задаёт начальный каталог, который будет показан в момент открытия диалогового окна OpenDialog или SaveDialog. В случае, если свойство InitialDir не задано, будет открыт текущий каталог или каталог, к которому пользователь в последнее время обращался во время работы приложения. Рекомендуется указывать путь каталога, если приложение использует, например, собственный тип файлов.
Свойство DefaultExt
Задаёт расширения файла в строке названия по умолчанию. Если свойства не задано, то пользователю необходимо указать в диалоговом окне полностью имя файла с расширением. Если указать значение, то пользователю достаточно написать только имя файла, а расширение будет задано автоматически.
Свойство Title
Задаёт имя заголовка диалогового окна OpenDialog или SaveDialog. Если свойство не задано, то откроется диалоговое окно с заголовком, заданным системой. Если указать значение свойству, например, «Укажите имя и тип файла», то открываемое диалоговое окно будет с указанным заголовком.
Свойство Options
Задаёт условия выбора файла. Обладает множеством полезных параметров.
Параметры | Описание |
---|---|
ofAllowMultiSelect | Даёт возможность выбирать несколько файлов. |
ofCreatePrompt | Если было написано имя несуществующего файла, то появится замечание с запросом создавать ли файл с указанным именем. |
ofEnablelncludeNotify | Посылает сообщение в диалоговое окно. |
ofEnableSizing | Разрешает или запрещает изменение размера диалогового окна. |
ofExtensionDifferent | Отображает сообщение, если после выполнения диалогового окна, расширение файла отличается от DefaultExt, выбранное пользователем. |
ofFileMustExist | Отображает сообщение об ошибке, если пользователь написал имя несуществующего файла. |
ofHideReadOnly | Скрывает из диалогового окна пункт – только для чтения. |
ofNoChangeDir | Сбрасывает путь последнего открытого каталога пользователем при поиске файлов и восстанавливает текущий. |
ofNoDereferenceLinks | Запрещает переназначать shortcut keys (клавиши быстрого доступа) в диалоговом окне. |
ofNoLongNames | Запрещает слишком длинное название и расширение файлов (название не более 8 символов, расширения не более 3). |
ofNoNetworkButton | Скрывает кнопку поиска в сети в диалоговом окне. Параметр ofOldStyleDialog должен быть включён. |
ofNoReadOnlyReturn | Генерируется сообщение об ошибке, если пользователь выбрал файл только для чтения. |
ofNoTestFileCreate | Запрещает выбор защищенных файлов в сети, а так же недоступных дисков во время сохранения файла. |
ofNoValidate | Задаёт список символов, которые запрещено вводить в название файлов, но не запрещает выбирать файлы с запрещёнными символами. |
ofOldStyleDialog | Устанавливает внешний вид диалогового окна в старом стиле. |
ofOverwritePrompt | Отображает сообщение о перезаписывании существующего файла, если пользователь при сохранении написал имя существующего файла. |
ofPathMustExist | Отображает сообщение об ошибке, если пользователь указал несуществующий каталог. |
ofReadOnly | При открытии диалогового окна отмечает пункт – открыть только для чтения. |
ofShareAware | Игнорирует ошибки коллективного доступа и позволяет выбирать файла. |
ofShowHelp | Включает справку в диалоговом окне. |
В C++ Builder 5 присутствует свойство OptionsEx. Оно позволяет задать дополнительные условия выбора файла. Параметр ofExNoPlacesBar скрывает стандартные кнопки папок Windows в диалоговом окне.
Все параметры из таблицы свойств Options и OptionsEx, по умолчанию выключены, а единственный параметр ofHideReadOnly включён.
В компонентах OpenDialog и SaveDialog есть возможность обрабатывать некоторые события. Это предусмотрено для того, если стандартных свойств и параметров недостаточно. Таким образом, компоненты OpenDialog и SaveDialog не ограничивают в возможностях при разработке приложений.
Событие OnCanClose
Возникает, когда закрывается диалоговое окно после выбора файла. Если пользователь закроет диалоговое окно кнопкой отмена или клавишей Esc, то событие OnCanClose не запускается. Так можно создать свои условия при обработке события OnCanClose и запретить закрытие диалогового окна пока пользователь не выполнит указанное условие, задав параметру CanClose значение false.
Событие OnFolderChange
Возникает в случае изменения каталога.
Событие OnSelectionChange
Срабатывает, когда пользователь переименовывает имя файла в диалоговом окне.
Событие OnTypeChange
Срабатывает, когда пользователь изменяет расширение файла в диалоговом окне.
Пример загрузки текста из файла
В приложение есть окно редактирования RichEdit1, которое будет содержать некий текст. Так же на форме добавлены компоненты OpenDialog1 и SaveDialog1.
AnsiString txt = "";
Компонентом OpenDialog1 будет осуществляться загрузка текста из файла в RichEdit1.
if (OpenDialog1->Execute())
{
txt = OpenDialog1->FileName;
RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
}
Приведённый код вызывает диалоговое окно и проверяет был ли выбран файл. Если файл выбрал, то функция Execute вернёт true, иначе false. В переменную txt типа AnsiString записывается имя файла командой OpenDialog1->FileName, а содержимое файла загружается в RichEdit1 с помощью метода LoadFromFile.
Загружаемый текст из файла должен быть в кодировке ANSI.
Пример сохранения текста в файл
AnsiString txt = "";
if(txt!= "")
RichEdit1->Lines->SaveToFile(txt);
else
if(SaveDialog1->Execute())
{
txt = SaveDialog1->FileName;
RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
}
Если имя файла txt не пустое и содержит некоторый текст, то во время сохранения не будет вызвано диалоговое окно, а текст будет сохранён в файле методом SaveToFile. Если имя файла txt пусто, то текст из RichEdit1 будет сохранён с помощью диалогового окна SaveDialog1.