- •Федеральное агентство по образованию государственное образовательное учреждение
- •Кафедра автоматики и телемеханики интегрированная среда разработки приложений
- •Лабораторная работа 1 Ознакомление с Интегрированной Средой Разработки (иср)
- •Основное окно иср
- •Библиографический список
- •Лабораторная работа 2 Формы и компоненты Включение в проект новой формы
- •Размещение компонентов на форме
- •Депозитарий – хранилище форм и проектов
- •Задание 7. Опробовать режимы заимствования форм из Депозитария
- •Библиографический список
- •Лабораторная работа 3 Отладка приложений Компиляция и компоновка проекта
- •Сообщения компилятора и компоновщика
- •Действия в случае ошибки выполнения
- •Дальнейшие действия
- •Окно наблюдения Список Часов
- •Окно оценки и модификации Оценить|Изменить
- •Пошаговое выполнение приложения
- •Точки прерывания
- •Использование окна Инспектора Отладки
- •Другие средства отладки
- •Библиографический список
- •Лабораторная работа 4 Компоненты ввода и отображения текстовой информации
- •Компоненты Label, StaticText, Panel
- •Компоненты Edit, LabeledEdit, MaskEdit
- •Компоненты Memo, RichEdit
- •Компоненты ListBox, CheckListBox, ValueListEditor
- •Компонент StringGrid
- •Библиографический список
- •Лабораторная работа 5 Диаграммы и графики Компонент Chart
- •Компонент Image
- •Формирование квадратных матриц
- •Кнопки, индикаторы, управляющие элементы
- •Управляющие кнопки Button и BitBtn
- •Кнопка с фиксацией SpeedButton
- •Группы радиокнопок − компоненты RadioGroup, RadioButton и GroupBox
- •Индикаторы CheckBox и CheckListBox
- •Ползунки и полосы прокрутки − компоненты TrackBar и ScrollBar
- •Заголовки − компоненты HeaderControl и Header
- •Таймер − компонент Timer
- •Панели и компоненты внешнего оформления
- •Панели общего назначения − компоненты Panel,
- •Многостраничные панели − компоненты TabControl,
- •Инструментальные панели − компоненты ToolBar и PageScroller
- •Перестраиваемые панели − компоненты CoolBar и ControlBar
- •Библиографический список
- •Лабораторная работа 9 Системные диалоги
- •Диалоги открытия и сохранения файлов – компоненты
- •Фрагменты диалогов – компоненты
- •Диалог выбора шрифта – компонент FontDialog
- •Диалоги выбора цвета – компоненты ColorDialog, ColorBox
- •Диспетчеризация действий на основе компонента ActionList
- •Диспетчеризация действий на основе компонентов ActionManager, ActionMainMenuBar, ActionToolBar, CustomizeDlg
- •Библиографический список
Диалоги открытия и сохранения файлов – компоненты
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.
Начните новое приложение, в свойство Caption формы впишите ДИАЛОГИ OPENDIALOG, SAVEDIALOG.
Поместите на форму компоненты OpenDialog1, SaveDialog1, MainMenu1 и RichEdit1.
Сконструируйте меню с командами Открыть, Сохранить как и Сохранить.
После чтения файла нужно запомнить его имя, чтобы знать, под каким именем потом его сохранять. Для хранения имени файла определите переменную с именем MyFName и объявите ее как глобальную в модуле формы:
AnsiString MyFName = "";
Впишите обработчик команды Открыть:
if(OpenDialog1->Execute())
{
MyFName = OpenDialog1->FileName;
RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
}
Этот оператор вызывает диалог OpenDialog1, проверяет, выбрал ли пользователь файл (если выбрал, то функция Execute возвращает true), после чего имя выбранного файла (OpenDialog1->FileName) сохраняется в переменной MyFName и файл загружается в текст RichEdit1 методом LoadFromFile.
Впишите обработчик команды Сохранить как:
SaveDialog1->FileName = MyFName;
if(SaveDialog1->Execute())
{
MyFName = SaveDialog1->FileName;
RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
}
Первый из этих операторов присваивает свойству FileName компонента SaveDialog1 имя выбранного файла. Это имя по умолчанию будет предложено пользователю при открытии диалога Сохранить как. Следующий оператор открывает диалог и, если пользователь выбрал в нем файл, запоминает новое имя файла и сохраняет в файле с этим именем текст компонента RichEdit1.
Впишите обработчик команды Сохранить:
if(MyFName!="")
RichEdit1->Lines->SaveToFile(MyFName);
else
if(SaveDialog1->Execute())
{
MyFName = SaveDialog1->FileName;
RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
}
Если имя файла MyFName не равно пустой строке, т.е. имя файла известно, то нет необходимости обращаться к какому-то диалогу, и текст сохраняется методом SaveToFile. Если же имя файла неизвестно, то текст сохраняется с помощью диалога SaveDialog1 так же, как было рассмотрено выше.
После команды Сохранить все запустите приложение на выполнение. Убедитесь в работоспособности приложения.
Выше были рассмотрены диалоги открытия и сохранения файлов произвольного типа. Однако в библиотеке C++Builder имеются также специализированные диалоги открытия и закрытия графических файлов: OpenPictureDialog и SavePictureDialog. С помощью компонента OpenPictureDialog откройте графический файл ..Program Files\Common Files\Images\Splash\16 Color\earth. Убедитесь в том, что окна, открываемые данными компонентами, отличаются удобной возможностью просматривать изображения в процессе выбора файла.
Свойства компонентов OpenPictureDialog и SavePictureDialog ничем не отличаются от свойств компонентов OpenDialog и SaveDialog. Единственное отличие – заданное значение по умолчанию свойства Filter в OpenPictureDialog и SavePictureDialog. В редакторе фильтра перечислены все типы графических файлов, с которыми может работать диалог. Пользователю остается удалить фильтры тех файлов, с которыми он не будет работать, и, если нужно, добавить фильтр “Все файлы(*.*)”.