Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_ПОА_2005_Builder.doc
Скачиваний:
7
Добавлен:
03.05.2019
Размер:
1.26 Mб
Скачать

Диалоги открытия и сохранения файлов – компоненты

OpenDialog, SaveDialog, OpenPictureDialog, SavePictureDialog

Компоненты OpenDialog – законченный диалог «Открыть файл» и SaveDialog – законченный диалог «Сохранить файл как…» используются в большинстве приложений.

Создайте новый проект, перенесите на форму компоненты OpenDialog и SaveDialog и, поочередно выделяя, просмотрите их свойства. Видно, что свойства этих компонентов одинаковы, только смысл несколько различен для открытия и сохранения файлов. Двойной щелчок на компонентах вызывает диалоговые окна Открытие файла и Сохранение соответственно.

Основное свойство, в котором возвращается в виде строки выбранный пользователем файл, – FileName. Значение этого свойства можно задать и перед обращением к диалогу, т.е. перед вызовом диалогового окна. Убедитесь в том, что тогда оно появится в диалоге как значение по умолчанию в окне Имя файла.

В свойстве Filter задаются типы искомых файлов, появляющиеся в диалоге в выпадающем списке Тип файла. В процессе проектирования это свойство задают с помощью редактора фильтра, который вызывается нажа-тием кнопки с многоточием около имени этого свойства в Инспекторе Объектов. В левой панели Имя фильтра окна редактора фильтра записы-вают тот текст, который увидит пользователь в списке Тип файла диалога, а в правой панели Фильтр записываются шаблоны фильтра. Например,

Имя фильтра Фильтр

текстовые (*.txt, *.doc) *.txt; *.doc

все файлы *.*

Убедитесь в том, что после выхода из окна редактора фильтра заданные шаблоны появятся в свойстве Filter в виде строки вида:

текстовые (*.txt, *.doc)|*.txt; *.doc|все файлы|*.*|

В аналогичном виде можно задавать свойство Filter программно во время выполнения приложения.

Свойство FilterIndex определяет номер фильтра, который будет по умолчанию показан пользователю в момент открытия диалога. Например, значение FilterIndex=1 задает по умолчанию первый фильтр.

Свойство InitialDir определяет начальный каталог, который будет открыт в момент начала работы пользователя с диалогом. Если значение этого свойства не задано, то открывается текущий каталог или тот, который был открыт при последнем обращении пользователя к соответствующему диалогу в процессе выполнения данного приложения.

Свойство DefaultExt определяет значение расширения файла по умолчанию. Убедитесь в том, что если оно не задано, то пользователь должен указать в диалоге полное имя файла с расширением, и в том, что если оно задано, то можно писать в диалоге имя без расширения, так как будет принято заданное расширение.

Свойство Title позволяет задать заголовок диалогового окна. Если это свойство не задано, окно открывается с заголовком, определенным в системе (например, Открытие файла и Сохранение). Но можно задать и свой заголовок, подсказывающий пользователю ожидаемые действия. Например, Укажите имя и тип сохраняемого файла. Убедитесь в этом.

Свойство Options определяет условия выбора файла. Множество опций, которые можно установить программно или во время проектирования, включает:

ofAllowMultiSelect

Позволяет пользователю выбирать несколько файлов

ofCreatePrompt

В случае, если пользователь написал имя несущест-вующего файла, появляется замечание и запрос, надо ли создать файл с заданным именем

ofEnableIncludeNotify

Разрешает посылать в диалог сообщения

ofEnableSizing

Разрешает пользователю изменять размер диалого-вого окна

ofExtensionDifferent

Этот флаг, который можно прочитать после выпол-нения диалога, показывает, что расширение файла, выбранного пользователем, отличается от DefaultExt

ofFileMustExist

В случае, если пользователь написал имя несущест-вующего файла, появляется сообщение об ошибке

ofHideReadOnly

Удаляет из диалога индикатор Открыть только для чтения

ofNoChangeDir

После щелчка пользователя на кнопке OK восста-навливает текущий диалог, независимо от того, какой каталог был открыт при поиске файла

ofNoDereferenceLinks

Запрещает переназначать клавиши быстрого доступа в диалоговом окне

ofNoLongNames

Отображаются только не более 8 символов имени и трех символов расширения

ofNoNetworkButton

Убирает из диалогового окна кнопку поиска в сети. Действует только, если флаг ofOldStyleDialog включен

ofNoReadOnlyReturn

Если пользователь выбрал файл только для чтения, то генерируется сообщение об ошибке

ofNoTestFileCreate

Запрещает выбор в сети защищенных файлов и недоступных дисков при сохранении файла

ofNoValidate

Не позволяет писать в именах файлов неразрешен-ные символы, но не мешает выбирать файлы с неразрешенными символами

ofOldStyleDialog

Создает диалог выбора файла в старом стиле

ofOverwritePrompt

В случае, если при сохранении файла пользователь написал имя существующего файла, появляется замечание, что файл с таким именем существует, и запрашивается желание пользователя переписать существующий файл

ofPathMustExist

Генерирует сообщение об ошибке, если пользова-тель указал в имени файла несуществующий каталог

ofReadOnly

По умолчанию включает индикатор Открыть толь-ко для чтения при открытии диалога

ofShareAware

Игнорирует ошибки нарушения условий коллектив-ного доступа и разрешает, несмотря на них, производить выбор файла

ofShowHelp

Отображает в диалоговом окне кнопку Справка

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

Если разрешить с помощью опции ofAllowMultiSelect множественный выбор файлов, то список выбранных файлов можно прочитать в свойстве Files типа Strings. При включении опции ofOldStyleDialog изменяется вид диалогового окна. Убедитесь в этом.

В компонентах диалогов открытия и сохранения файлов предусмотрена возможность обработки ряда событий. Она может потребоваться, если опций не хватает, чтобы установить все требуемые ограничения на выбор файлов.

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

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

Задание. Построить приложение, содержащее MainMenu1 и окно редактирования RichEdit1, в которое по команде меню Открыть загрузить текстовый файл и после каких-то изменений, сделанных пользователем, – сохранить текст по команде Сохранить в том же файле, а по команде Сохранить как – в файле с другим именем. Для действий с файлами использовать диалоги OpenDialog и SaveDialog.

  1. Начните новое приложение, в свойство Caption формы впишите ДИАЛОГИ OPENDIALOG, SAVEDIALOG.

  2. Поместите на форму компоненты OpenDialog1, SaveDialog1, MainMenu1 и RichEdit1.

  3. Сконструируйте меню с командами Открыть, Сохранить как и Сохранить.

  4. После чтения файла нужно запомнить его имя, чтобы знать, под каким именем потом его сохранять. Для хранения имени файла определите переменную с именем MyFName и объявите ее как глобальную в модуле формы:

AnsiString MyFName = "";

  1. Впишите обработчик команды Открыть:

if(OpenDialog1->Execute())

{

MyFName = OpenDialog1->FileName;

RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);

}

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

  1. Впишите обработчик команды Сохранить как:

SaveDialog1->FileName = MyFName;

if(SaveDialog1->Execute())

{

MyFName = SaveDialog1->FileName;

RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);

}

Первый из этих операторов присваивает свойству FileName компонента SaveDialog1 имя выбранного файла. Это имя по умолчанию будет предложено пользователю при открытии диалога Сохранить как. Следующий оператор открывает диалог и, если пользователь выбрал в нем файл, запоминает новое имя файла и сохраняет в файле с этим именем текст компонента RichEdit1.

  1. Впишите обработчик команды Сохранить:

if(MyFName!="")

RichEdit1->Lines->SaveToFile(MyFName);

else

if(SaveDialog1->Execute())

{

MyFName = SaveDialog1->FileName;

RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);

}

Если имя файла MyFName не равно пустой строке, т.е. имя файла известно, то нет необходимости обращаться к какому-то диалогу, и текст сохраняется методом SaveToFile. Если же имя файла неизвестно, то текст сохраняется с помощью диалога SaveDialog1 так же, как было рассмотрено выше.

  1. После команды Сохранить все запустите приложение на выполнение. Убедитесь в работоспособности приложения.

Выше были рассмотрены диалоги открытия и сохранения файлов произвольного типа. Однако в библиотеке C++Builder имеются также специализированные диалоги открытия и закрытия графических файлов: OpenPictureDialog и SavePictureDialog. С помощью компонента OpenPictureDialog откройте графический файл ..Program Files\Common Files\Images\Splash\16 Color\earth. Убедитесь в том, что окна, открываемые данными компонентами, отличаются удобной возможностью просматривать изображения в процессе выбора файла.

Свойства компонентов OpenPictureDialog и SavePictureDialog ничем не отличаются от свойств компонентов OpenDialog и SaveDialog. Единственное отличие – заданное значение по умолчанию свойства Filter в OpenPictureDialog и SavePictureDialog. В редакторе фильтра перечислены все типы графических файлов, с которыми может работать диалог. Пользователю остается удалить фильтры тех файлов, с которыми он не будет работать, и, если нужно, добавить фильтр “Все файлы(*.*)”.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]