Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы ПП all-in-one.docx
Скачиваний:
10
Добавлен:
14.11.2019
Размер:
2.64 Mб
Скачать

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

Шаг 23. Диалоговые окна для выбора открываемого или сохраняемого файла организуется с помощью компонентов OpenDialog и SaveDialog.

Найдите их в пали­тре компонент на странице Dialogs:

и поместите на форму:

Присвойте компонентам имена OpenDialog и SaveDialog:

Шаг 23.1. Познакомьтесь со свойствами этих компонент, которые приведены в таблице 5.

Таблида.5. Важнейшие свойства компонентов OpenDialog и SaveDialog.

Свойство

Описание

DefaultExt

FileName

Filter

FilterIndex

InitialDir

Options

Title

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

Начальное имя файла.

Фильтр имени файла.

Номер активного фильтра.

Начальный каталог, открываемый при первом появлении окна диалога.

Параметры, определяющие внешний вид и поведение окна диалога (см. таблицу 4.6).

Заголовок окна диалога. Если значение свойства не указано, то заголовок будет стандартным — Open (Открыть) или Save (Сохранить) в зависимости от типа компонента.

Компоненты OpenDialog и SaveDialog очень схожи между собой, оба являются объектно-ориентированными оболочками стандартных диалоговых окон Win­dows: Open и Save. Например, на следующем рисунке показано окно Open :

Типичный сценарий работы с каждым из компонент OpenDialog и SaveDialog состоит в следующем. Компонент помещается на форму и конфигурируется для выбора тех или иных файлов. По команде меню Open... или Save As... у соответствующего компонента вызывается метод Execute(). Метод Execute() выполняет диалог и возвращает значение true, если пользователь выбрал файл. Пол­ный маршрут к файлу запоминается в значении свойства FileName. Ход даль­нейших действий зависит от прикладной задачи и, как правило, включает или чтение, или запись файла, в зависимости от обрабатываемой команды меню.

Придерживаясь написанного сценария, приспособим компоненты OpenDialog и SaveDialog для выбора графических файлов с расширениями *.bmp, *.ico, *.emf и *.wmf. Чтобы пользователь мог просматривать файлы выборочно, т. е. какого-то одного типа, в диалоговых блоках имеется набор фильтров, оформленный в виде выпадающего списка «Тип файлов» (см.рис.). Исходные данные для этого списка устанавливаются в свойстве Filter. Номер активного в данный момент фильтра записывается в свойстве FilterIndex.

Шаг 24. Сформируйте фильтры для приложения. Активизируйте на форме ком­понент OpenDialog и в инспекторе объектов сделайте двойной щелчок мыши на значении свойства Filter :

Шаг 25. В результате на экране появится редактор фильтра. Он представляет собой список с двумя колонками. В левой колонке вводится текст, отображаемый в выпадающем списке Тип файлов. В правой колонке через точку с запятой записываются маски, на основании которых выполняется фильтрация файлов в окне диалога. Для того чтобы предоставить пользователю максималь­ное удобство при выборе графических файлов, установите в компоненте OpenDialog фильтры, показанные на рис.

Обратите внимание на первую строку фильтра. В списке расширения отделяются друг от друга точкой с запятой.

Шаг 26. Действуя аналогично, установите фильтр в компоненте SaveDialog, как показано на рис:

Компоненты OpenDialog и SaveDialog имеют большое количество булевых пара­метров, организованных в виде флагов составного свойства Options. По умолчанию все параметры имеют значение false. Результат установки параметров в значе­ние true прокомментирован в таблице 6.

Шаг 27. В нашем простом примере ограничимся тем, что установим в значе­ние true в обоих компонентах (OpenDialog и SaveDialog) параметр ofHideReadOnly, а в компоненте SaveDialog — еще и параметр ofOverwitePrompt (см. таблицу 6).

Таблица 6. Параметры компонентов OpenDialog и SaveDialog.

Параметр

Описание

ofAllowMultiSelect

Если равен true, то пользователь может выделить сразу несколько файлов.

ofCreatePrompt

Если равен true и пользователь вводит имя несуществующего файла, то пользователю задается вопрос, желает ли он создать новый файл с таким именем

ofExtensionDifferent

Этот параметр устанавливается после завершения диалога, если расширение в имени файла отличается от начального расширения.

ofFileMustExist

Если равен true, то пользователь не сможет ввести имя несуществующего файла.

ofHideReadOnly

Если равен true, то переключатель Read-only отсутствует в окне диалога.

ofNoChangeDir

Если равен true, то пользователь не сможет сменить каталог в окне диалога.

ofNoDereferenceLinks

Если равен true, то ярлыки к каталогам трактуются как обычные файлы. В противном случае они трактуются как каталоги.

ofNoLongNames

Если равен true, то длинные имена файлов запрещены.

ofNoNetworkButton

Если равен true, то кнопка Network отсутствует в окне диалога. Этот параметр работает только в паре с параметром ofOldStyleDialog.

ofNoReadOnlyReturn

Если равен true, то пользователь не сможет ввести файл с атрибутом read-only (только для чтения).

ofNoTestFileCreate

Если равен true, то проверка на возможность записи в каталог не выполняется.

ofNoValidate

Если равен true, то пользователь может вводить в имени файла любые символы, даже недопустимые.

ofOldStyleDialog

Если равен true, то окно диалога отображается в старом стиле Windows 3.1.

ofOverwritePrompt

Если равен true, то пользователю выдается предупреждение при попытке сохранить файл с именем, которое уже существует.

ofReadOnly

Если равен true, то переключатель Read-only в окне диалога включен.

ofPathMustExist

Если равен true, то пользователь не сможет ввести для файла несуществующий маршрут.

ofShareAware

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

OfShowHelp

Если равен true, то в окне диалога присутствует кнопка Help.

Отображение картинок

Шаг 28. Теперь нужен компонент, обеспечивающий отображение картинок различных форматов. Такой компонент в C++Builder есть, он называется Image и находится в палитре компонентов на странице Additional (рис. 23). Выберите его из палитры и опустите в левый вер­хний угол формы. Назовите новый компонент Image.

Характерные свойства компонента Image кратко описаны в таблице 7.

Таблица 7. Важнейшие свойства компонента Image.

Свойство

Описание

AutoSize

Center Picture

Stretch

Если равно true, то размеры компонента автоматически подгоняются под размеры картинки.

Центрирует картинку в пределах компонента.

Содержит картинку, отображаемую в области компонента. Свойство Picture является объектом класса TPicture и может хранить точечный рисунок (bitmap), метафайл (metafile), значок (icon).

Если равно true, то картинка масштабируется так, чтобы ее размеры совпадали с размерами компонента. Масштабирование выполняется только для точечных рисунков и метафайлов.

Компонент Image позволяет выводить картинки трех основных форматов: то­чечный рисунок (bitmap), метафайл (metafile) и значок (icon). Отображаемая картинка хранится в свойстве Picture, доступном и на этапе разработки, и на этапе выполнения приложения.

Шаг 29. Размеры установленной картинки могут не совпадать с текущими раз­мерами управляющего элемента. В этом случае не уместившаяся часть изобра­жения отрезается. Чтобы подогнать размеры управляющего элемента под разме­ры картинки, установите свойство AutoSize в true (см рис.). После этого при каждой установке свойства Picture размеры управляющего элемента будут изме­няться автоматически.

Бывает и обратная ситуация, когда нужно выполнить масштабирование кар­тинки, подогнав ее размеры под заданные размеры управляющего элемента. Для этого свойство Stretch устанавливается в true, a Autosizeв false. Масшта­бирование целесообразно применять только для метафайлов; для точечных рисунков оно не всегда дает приятный результат — начинает сказываться точечная природа изображения.

Сейчас компонент Image находится на своем месте и подготовлен к работе (свойство Autosize имеет значение true). Рассмотрим, как осуществляется за­грузка и сохранение картинки по командам меню Open... и Save As...

Шаг 30. В файле Main.cpp уже имеется недописанный обработчик команды меню Open... В нем нужно выполнить стандартное диалоговое окно Open и загру­зить картинку в том случае, если пользователь ввел в окне имя файла. Добавьте в обработчик строки, выделенные жирным шрифтом:

void __fastcall TPictureForm::OpenltemClick(TObject *Sender)

{if(OpenDialog->Execute())

{

Image->Picture->LoadFromFile

(OpenDialog->FileName);

EnableCommands(true);

NormalSizeItem->Click();

}

}

В данном обработчике обратите внимание на вызов метода Click() у компонента NormalSizeItem. Он имитирует выбор пункта меню Normal Size с тем, чтобы сразу после загрузки картинка имела нормальный размер.

Шаг 30.1. Запустите приложение на выполнение и откройте файл с расширением *.bmp, который находится в той же директории, в которой находится текстовый файл лабораторной работы. Вы увидите следующую картинку :

Шаг 31. Пункт меню Save As... еще не имеет обработчика события OnClick, поэто­му вам придется его установить (напомним, что это делается в инспекторе объектов на странице Events). Обработка команды Save As... состоит в выдаче стандартно­го диалогового окна Save с последующим сохранением картинки в файле:

void __fastcall TPictureForm::SaveAsItemClick (TObject *Sender)

{

if (SaveDialog->Execute())

Image->Picture->SaveToFile(SaveDialog->FileName);

}

Шаг 31.1. Снова запустите приложение на выполнение и откройте тот же файл с расширением *.bmp. Затем сохраните этот файл с новым именем в директорию, в которой находится текстовый файл лабораторной работы. Затем откройте сохраненный файл и убедитесь, что приложение делает то, что Вам необходимо.

Шаг 32. Осталось дописать несколько обработчиков событий. В обработчике команды меню Close добавьте строки для удаления картинки компонента Image и уменьшения размеров компонента до нуля, чтобы в отсут­ствие картинки компонент не занимал места на форме:

void __fastcall TPictureForm::CloseItemClick (TObject *Sender)

{

Image->Picture = NULL;

Image->Width = 0;

Image->Height = 0;

NormalSizeItem->Click();

EnableCommands(false);

}

Шаг 33. Еще остались незавершенными обработчики команд меню Half Size, Normal Size и Double Size, которые тоже нужно доработать. Добавьте в обработчики строки, выделенные жирным шрифтом. Разберетесь с ними самостоятельно, читая комментарии в тексте программы:

void __fastcall PictureForm::HalfSizeItemClick (TObject *Sender)

{

HalfSizeItem->Checked = true;

PopHalfSizeItem->Checked = true;

Image->AutoSize = true; // восстановить нормальные размеры компонента

Image->Width = Image->Width/2;// уменьшить ширину наполовину

Image->Height = Image->Height/2;// уменьшить высоту наполовину

}

// -------------------------------------------

void __fastcall TPictureForm :: NormalSizeItemClick (TObject *Sender)

{

NormalSizeItem->Checked = true;

PopNormalSizeItem->Checked = true;

Image->AutoSize = true; // восстановить нормальные размеры компонента

}

// -------------------------------------------

void __fastcall TPictureForm :: DoubleSizeItemClick (TObject *Sender)

{

DoubleSizeItem->Checked = true;

PopDoubleSizeItem->Checked = true;

Image->AutoSize = true; // восстановить нормальные размеры компонента

Image->Width = Image->Width * 2; // удвоить ширину

Image->Height = Image->Height * 2; // удвоить высоту

}

В первом приближении приложение для просмотра графических файлов гото­во. Вы­полните компиляцию приложения и проверьте его работоспособность. Обратите внимание на способность формы прокручивать картинки, которые в ней не умещаются. Это явление называет­ся автоматической прокруткой. Автоматическая прокрутка не требует ника­ких усилий со стороны программиста. Попробуйте изменять свойства Stertch и AvtoSize компоненты Image.