Лабораторная работа 4

Работа с простейшими графическими объектами Delphi.

Использование Радио-кнопок.

В этой лабораторной работе мы покажем, как можно придать приложению совершенно оригинальный вид с помощью компонентов: Image (DBImage), Shape и Bevel, а также как управлять приложением, используя «зависимые» переключатели (радио-кнопки).

Image (Изображение) - позволяет поместить графическое изображение в любое место на форме. Этот объект очень прост в использовании - достаточно выбрать его на странице Additional, поместить в нужное место формы и задать требуемые размеры.

Картинка должна храниться в файле одного из форматов: BMP (bitmap), WMF (Windows Meta File) или ICO (icon). Компонент DBImage используется при программировании баз данных и отображает картинку только формата BMP.

Примечаие. Как известно, существует множество других форматов для хранения изображений, например: РCX, GIF, TIFF, JPEG. Для включения в приложение изображений в этих форматах, нужно предварительно перевести их в формат BMP, WMF или ICO. Перевод изображения из одного формата в другой «умеют» осуществлять ряд программ (например, графический редактор Paint, пакет PhotoShop и др.).

Картинку можно поместить на форму во время создания приложения, изменив свойство Picture компонента Image в Инспекторе Объектов, прописав туда путь к нужному графическому файлу.

При проектировании приложения следует помнить, что изображение, помещенное на форму, включается в файл ресурсов (*.dpr) и затем включается в EXE-файл. Поэтому такой EXE-файл может получиться достаточно большим и занимать много места в оперативной памяти компьютера.

Как альтернативу, можно рассмотреть загрузку картинки во время выполнения программы. Для этого у свойства Picture, которое является объектом со своим набором свойств и методов, есть специальный метод LoadFromFile (Загрузка из файла). Это делается, например, так:

Image1.Picture. LoadFromFile(<[Путь]Имя загружаемого файла>);

Примечание. В этом случае путь к файлу должен быть заключен в апострофы, например: ‘C:\Galery\Картина.bmp’.

Ниже приведены наиболее важные свойства компонента Image, доступные в Инспекторе Объектов, которыми можно воспользоваться во время разработки приложения:

Свойство

Значение

Align

Позволяет автоматически изменить масштаб изображения и установить месторасположение картинки в окне формы.

AutoSize

При значении равным True, размеры компонента Image автоматически подгоняются под размеры картинки.

Center

При значении равным True картинка цент-рируется в пределах компонента Image.

Picture

Определяет изображение, отображаемое в области компонента в одном из следую-щих форматов:

*.bmp (точечный рисунок),

*.wmf (метафайл),

*.ico (значок).

Stretch

При значении равным True, изображение масштабируется так, чтобы его размеры совпадали с размерами компонента Image. Масштабирование выполняется только для точечных рисунков *.bmp и метафайлов *.wmf.

Задание 1. Выполните следующие действия:

·  откройте новый проект;

·  дайте форме название “Работа с графическими объектами”;

·  поместите на форму компонент Image со страницы Additional Палитры Компонентов и задайте в его свойстве Picture путь к любому графическому файлу формата *.bmp, имеющемся на Вашем компьютере;

·  поэкспериментируйте со свойствами компонента Image, приведенными в таблице выше;

·  покажите результаты Вашей работы преподавателю. Удалите объект Image с формы. Проект не закрывайте – он Вам еще пригодится.

Shape (Геометрическая фигура) - простейший графический объект, принимающий форму по желанию разработчика: эллипс, прямоугольник, квадрат, прямоугольник (квадрат) с закругленными углами. Ниже приводятся его важнейшие свойства:

Shape (Вид фигуры) - задает вид объекта, причём размер объекта определяется рамкой, в которую он вписан. Размеры рамки можно изменить по желанию. Может принимать следующие значения:

Значение

Перевод

stCircle

Круг

stEllipse

Эллипс

stRectangle

Прямоугольник

stRoundRect

Скругленный прямоугольник

stRoundSquare

Скругленный квадрат

stSquare

Квадрат

Brush (Кисть) - задает цвет и вид заполнения объекта;

Pen (Перо) - определяет цвет и вид границы объекта.

Эти свойства можно менять как во время разработки (дизайна), так и во время выполнения программы, написав нужные строки кода.

Bevel (Рамка) - объект, принимающий вид рамки или линии. Внешний вид задаётся с помощью следующих свойств:

Shape (Вид рамки) - может принимать значения:

Значение

Перевод

bsBottomLine

Линия снизу

bsBox

Объемный прямоугольник

bsFrame

Прямоугольная рамка

bsLeftLine

Линия слева

bsRightLine

Линия справа

bsSpacer

Пунктирная рамка

bsTopLine

Линия сверху

Style (Стиль) - может принимать значения:

Значение

Перевод

bsLowered

Вдавленый

bsRaised

Выпуклый

Задание 2. Выполните следующие действия:

·  поместите на форму проекта задания 1 компонент Shape и Bevel;

НЕ нашли? Не то? Что вы ищете?

·  поэкспериментируйте с их свойствами, приведенными в таблице выше;

·  создайте несколько различных геометрических фигур с различным заполнением и цветом, используя свойства Shape, Brush и Pen компонента Shape;

·  продемонстрируйте результаты работы преподавателю. Покиньте проект без сохранения.

Задание 3. Пользуясь этими компонентами, создадим простейшую программу для просмотра графических файлов.

Выполните следующие действия:

·  откройте новый проект;

·  задайте свойству Caption формы значение "Просмотр графических файлов";

·  поместите на форму следующие компоненты: Image, Shape, Label, два компонента Button со страницы Standart и компонент OpenDialog со страницы Dialogs;

·  у компонента Image измените свойство Align на значение alLeft для того, чтобы ваша картинка была выровнена по левому краю;

·  у компонента Label задайте свойству Caption значение "Просмотр";

·  у компонента Shape измените свойство Shape по своему усмотрению;

·  поэкспериментируйте со свойствами Pen и Brush у компонента Shape, а так же со свойством Color у компонента Label для создания различных визуальных эффектов;

Примечание. Компонент Label должен быть расположен поверх компонента Shape. Для этого на форму должен быть сначала помещен компонент Shape, а затем – Label.

·  измените значения свойств Caption у компонентов Button на “Открыть” и “Выход” соответственно.

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


Рис. 4.1. Примерный вид формы разрабатываемого приложения

Теперь осталось написать код обработки нажатий кнопок. Ниже полностью приведён текст модуля с необходимыми комментариями.

Примечание. Подчеркнутым шрифтом выделено то, что предсто-

ит написать Вам, обычным шрифтом – заготовка, созданная Del-

phi. Служебные слова выделены жирным шрифтом.

unit Unit1;

-Раздел интерфейса

interface

uses // Список используемых модулей

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls;

type //Раздел типов

TForm 1= class(TForm)

Image1: TImage;

Button1: TButton;

Button2: TButton;

OpenDialog1: TOpenDialog;

Shape1: TShape;

Label1: TLabel;

procedure Button1Click(Sender: TObject); //Процедуры, исполь-

procedure Button2Click(Sender: TObject); // зуемые программой

private

{ Private declarations }

public

{ Public declarations }

end;

var //Раздел переменных

Form1: TForm1;

Раздел реализации---

implementation

{$R *.DFM} //Подключение файлов ресурсов

procedure TForm1. Button1Click(Sender: TObject);

// Процедура обработки события - нажатие кнопки "Выход"

begin

Close //метод, обеспечивающий закрытие окна приложения

end;

procedure TForm1. Button2Click(Sender: TObject);

// Процедура обработки события - нажатие кнопки "Открыть"

begin

if OpenDialog1.Execute then //Проверка подтверждения выбора файла

begin

Caption:= OpenDialog1.FileName; //Изменение заголовка формы

Image1.Picture. LoadFromFile(OpenDialog1.FileName)

//Загрузка картинки

end

end;

-----Раздел инициализации (отсутствует)-----

end.

Примечание. В тексте программы использован метод OpenDialog1.Execute,открывающий стандартное диалоговое окно Windows для открытия файлов (принимает значение True в случае успешного открытия, False – в ином случае).

В заключение работы с этим заданием выполните следующее:

·  сохраните файлы проекта на диске в отдельной папке. Файлу проекта присвойте имя Prosmotr. dpr, имя файла кода программы (Unit1.pas) оставьте без изменения;

·  откомпилируйте программу, создав ЕХЕ-файл (Project/Compile). Помните, что этот файл будет иметь имя проекта, т. е. Prosmotr. ехе;

·  запустите Ваш ЕХЕ-файл из Windows95/98/NT и поработайте с ним. Покажите результаты работы преподавателю.

После запуска окно приложения должно выглядеть примерно так, как на рис. 4.2 (картинка, естественно, Ваша).


Рис. 4.2. Вид окна приложения после запуска

Компонент RadioButton.

Этот компонент носит название «Зависимый переключатель» или «Радио-кнопка» и расположен на странице Standard Палитры Компонентов. Компоненты этого типа всегда объединяются в группы и работают согласованно: при включении одного из них все остальные выключаются (подобно кнопкам обычного радиоприемника, откуда и взялись их названия).

В задании, приведенном ниже, будет показано, как осуществить такое согласованное взаимодействие отдельных RadioButton в коде программы. Но гораздо быстрее и удобнее это можно сделать с помощью компонента RadioGroup, о чем будет рассказано в следующей лабораторной работе.

Задание 4. Создадим ещё одну программу для просмотра графических файлов. Её идея состоит в следующем: при помощи зависимых переключателей (радио-кнопок) выводить на форму различные картинки. Вид формы представлен на рис. 4.3.

Рис. 4.3. Вид формы приложения «Переключение картинок»

Выполните следующие действия:

·  откройте новый проект;

·  измените заголовок формы в свойстве Caption на значение «Переключение картинок»;

·  установите компонент RadioButton (Радио-кнопка) на форму со страницы Standart Палитры Компонентов;

·  замените в свойстве Caption стандартное значение RadioButton1 на новое значение «1 картинка»;

·  аналогичным образом установите второй и третий компоненты Радио-кнопка и дайте им соответственно имена «2 картинка» и «3 картинка»;

·  расположите на форме компонент Button (кнопка);

·  замените в свойстве Caption стандартное значение Button1 на значение «Выход»;

·  двойным щелчком по объекту Button1 раскройте Редактор Кода, вставьте строку: Close;

·  выберете на Палитре Компонентов вкладку Additional. Щелкнув по компоненту Image, обведите курсором мыши место предполагаемой вставки рисунка на форме;

·  сделайте двойной щелчок в поле свойства Picture в Инспекторе Объектов. Раскроется диалоговое окно Редактора Изображений (Picture Editor). Загрузите файл рисунка (можно загрузить любой рисунок формата bmp), щелкнув по кнопке Load. По окончании работы с Picture Editor щелкните по кнопке Ok. Рисунок перенесется на форму. Размеры его можно подредактировать мышью;

·  установите аналогичным образом ещё две картинки (см. рис. 4.4.);

Рис. 4.4. Рабочий вид формы после установки трёх картинок

·  выделите первую картинку. Установите значение свойства Stretch компонента Image равным True для того, чтобы размеры картинки масштабировались под размеры компонента. Аналогичные действия проделайте и для остальных двух картинок;

Примечание. Так как картинки растровые, то при изменении масштаба их вид может значительно измениться. В этом случае лучше воспользоваться свойством AutoSize компонента Image, установив его значение равным True.

·  выделите компонент RadioButton1. Текущее состояние зависимого переключателя контролируется свойством Checked. Если одна радио-кнопка включена, то остальные должны быть выключены, поэтому установите значения свойства Checked, согласно таблице, приведенной ниже:

Компонент

Checked

RadioButton1

True

RadioButton2

False

RadioButton3

False

·  по очереди, активизируя компоненты Image мышью, установите для них следующие значения свойства Visible в Инспекторе Объектов:

Компонент

Visible

Image1

True

Image2

False

Image3

False

Примечание: За видимость картинок на форме отвечает свойство Visible компонента Image. Когда включена RadioButton1, то должна отображаться первая картинка, остальные не должны быть видны.

·  для управления переключением картинок необходимо написать программный код. Активизируйте RadioButton1, двойным щелч-ком мыши откройте Редактор Кода и впишите код:

procedure TForm1.RadioButton1Click(Sender: TObject);

begin

Image1.Visible:=True; // показать картитку

Image2.Visible:=False; // спрятать картинку

Image3.Visible:=False; // спрятать картинку

end;

·  аналогично, запишите код обработчиков событий для других радио-кнопок RadioButton2 и RadioButton3:

procedure TForm1.RadioButton2Click(Sender: TObject);

begin

Image2.Visible:=True; // показать картитку

Image1.Visible:=False; // спрятать картинку

Image3.Visible:=False; // спрятать картинку

end;

procedure TForm1.RadioButton3Click(Sender: TObject);

begin

Image3.Visible:=True; // показать картитку

Image2.Visible:=False; // спрятать картинку

Image1.Visible:=False; // спрятать картинку

еnd;

·  свойство Left всех картинок сделайте одинаковым, например, равным 10, чтобы поместить все картинки в одно место;

Примечание. Этого же эффекта можно добиться простым наложением картинок друг на друга.

·  сохраните результаты работы в отдельной папке. На запрос Delphi о задании имён файлов при сохранении введите: для проекта – Рrosmotr2.dpr, а имя файла программного кода (Unit1.pas) оставьте без изменения;

·  запустите проект. Он должен выглядеть, как показано на рис. 4.3. Проверьте работу радио-кнопок. Размеры компонентов Image мож-но увеличить так, чтобы использовать всю, незанятую кнопками, область формы. Покажите результаты работы преподавателю.

Задание для самостоятельной работы:

Попробуйте модифицировать проект, используя вместо радио-кнопок две обычные кнопки «Вперед» и «Назад», которые бы позволяли просматривать любое заданное количество картинок.

Вопросы

1.  Как поместить рисунок на форму? Какие способы для этой цели существуют и в чем их принципиальное отличие?

2.  Картинки какого формата может подключать к приложению компонент Image?

3.  Какое свойство компонента Image отвечает за изменение размеров картинки до размеров компонента? Компонента до размеров картинки? За видимость картинки?

4.  Для чего и как можно использовать компонент Shape?

5.  Какие значения и каким свойствам компонента Bevel нужно задать для получения выпуклого прямоугольника?

6.  Каким компонентом задаётся Радио-кнопка? В чём особенность работы нескольких Радио-кнопок, присутствующих на форме одновременно?

7.  Какое свойство отвечает за текущее состояние компонента RadioButton и каким образом?

Резюме

1.  Для встраивания изображения в приложение используется компонент Image, который имеет свойство Picture (путь к файлу с картинкой, задаваемой в процессе разработки приложения) и метод LoadFromFile (загрузка картинки из файла во время выполнения приложения по следующей схеме:

Image1.Picture. LoadFromFile(‘<путь к графическому файлу>’)

2.  Встраивать в приложение можно только картинки, имеющие формат: *.bmp, *.wmf, *.ico. Графические файлы, имеющие другой формат должны быть предварительно преобразованы (конвертированы) в нужный формат подходящими для этой цели программами.

3.  Простейшие графические объекты могут быть созданы в окне приложения следующими компонентами:

Shape (Геометрическая фигура) - графический объект принимающий форму по желанию разработчика: эллипс, прямоугольник, квадрат, прямоугольник (квадрат) с закругленными углами.

Bevel (Рамка)- графический объект, принимающий вид рамки или линии.

4. Компонент RadioButton (Радио-Кнопка), представляет собой «зависимый» переключатель. Один такой переключатель в приложении использовать не имеет смысла, поэтому они объединяются в группы, для того, чтобы там можно было выбрать один из них. Текущее состояние зависимого переключателя контролируется свойством Checked. Если одна радио-кнопка включена, то остальные должны быть отключены, именно поэтому к нему применяется термин «зависимый».