Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

OpenDialog, SaveDialog - диалоги открытия и сохранения файлов

CuBook4.15

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

  Комментарии

0 Юрий 29.09.2016 14:22 #2
Цитирую ktd:
А,где в Embarcadero этот диалог настраивается???
Копаю прогу, там, где - то, в диалоге установлен фильтр на файлы. В коде убейте не могу найти... Может, где, визуально это настраивается?

Это компоненты, в Builder'е находятся в закладке Dialogs и в CodeGear'е должны там же быть.
Кидаем на форму и в его свойствах (Properties) настраиваем как хотим.
0 ktd 28.09.2016 11:18 #1
А,где в Embarcadero этот диалог настраивается???
Копаю прогу, там, где - то, в диалоге установлен фильтр на файлы. В коде убейте не могу найти... Может, где, визуально это настраивается?

Добавить комментарий


Защитный код Обновить