Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа 7_1

.pdf
Скачиваний:
11
Добавлен:
18.03.2016
Размер:
851.89 Кб
Скачать

1

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

Тема: «Работа с графикой на поверхности формы»

Цель работы: 1. Освоить работу с классом «TCanvas» и научиться рисовать простейшие геометрические фигуры

2.Выполнить самостоятельную работу.

Порядок работы:

Приложения Windows осуществляют вывод графической информации на экран через специальную структуру данных, которая используется функциями GDI (graphics devices interface), и называется контекстом отображения. К нему относятся три инструмента:

Шрифт;

Перо;

Кисть.

Есть специальные классы для использования графических средств:

TCanvas – для контекста отображения;

TFont - для шрифта;

TPen – для пера;

TBrush – для кисти.

Связанные с этими классами объекты имеют свойства: Canvas, Font, Pen, Brush, Изображения можно строить на поверхности формы различными инструментами. Система Delphi предоставляет возможность рисовать на поверхности компонентов в

процессе выполнения приложения и создавать изображения при конструировании приложения. Есть также возможность построения диаграмм.

1.Рисование при выполнении программы

Основной класс для рисования – это TСanvas. Объект Canvas объединяет в себе поле для рисования, карандаш, кисть и шрифт и применяется как поверхность рисования для объектов, которые прорисовывают свое собственное изображение.

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

Свойство шрифта формы Form1.Font (задает размер символов для управляющих элементов формы) не совпадает со свойством шрифта поверхности рисования формы Form1.Canvas.Font (определяет размер символов текста, отображаемого на форме с помощью класса Tcanvas. Шрифт поверхности рисования доступен только при выполнении программы).

Canvas это поверхность визуальных объектов (например, формы, надписи, списка или компонента image, на которой соответствующие методы могут вычерчивать графические примитивы (линия, ломаная линия, многоугольники, эллипс, дуга, квадрат, прямоугольник). Наиболее часто рисование производится на поверхности формы.

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

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

2

Принцип отрисовки изображений:

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

При новом появлении этой области на экране графические данные, выведенные на нее ранее, не восстановятся, и их придется выводить снова.

Основную работу по выводу графики на поверхность формы должна выполнять функция обработки события OnPaint.

При выполнении различных графических операций используются типы:

TPoint – используется для задания координат точки; Описан следующим образом:

Tpoint = record

X:Longint;

Y:Longint ; End;

TRect – служит для определения прямоугольной области путем указания координат

левого верхнего и правого нижнего углов. Описан следующим образом:

Trect = record Case Integer of

0:(Left, Top, Right, Bottom : Integer);

1:(TopLeft, BottomRight : TPoint) ; End;

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

Текущая позиция определяется горизонтальной Х и вертикальной Y координатами. По умолчанию начало системы координат находится в левом верхнем углу поверхности рисования, а отсчет координат осуществляется в пикселах.

Для перемещения текущего указателя в новую позицию можно использовать метод MoveTo(X,Y: Integer). В результате выполнения этой процедуры перо устанавливается в новую позицию холста с координатами X и Y. При таком перемещении на холсте ничего не рисуется.

Положение текущего указателя также изменяет методы, связанные с выводом на холст фигур и текста: при их выполнении текущий указатель остается в позиции, где завершается процесс вывода.

Для рисования используются следующие методы:

3

4

Вид графических элементов определяют свойства поверхности, на которой эти элементы вычерчиваются (перо, кисть, шрифт).

5

Свойства объекта Pen (перо)

Свойства объекта Brush (кисть)

2.Ознакомиться с теоретическими сведениями

3.Создать тестовое приложение (пример книги)

6

4. Ознакомиться с теоретическими сведениями

5. Задания

Практическое задание 1. Написать программу, которая рисует на форме приложения простейшие геометрические фигуры: Эллипс, Прямоугольник, Квадрат и Простую Рамку. Предусмотреть возможность изменения цвета и стиля нарисованных фигур.

Выполнение: Создать новый проект и сохранить его в новой папке. Из условия задачи ясно, что нам нужно нарисовать несколько фигур. Расположите кнопки справа на форме, а левую часть оставьте пустой. Она нам пригодится для рисования фигур. Определимся, что область для рисования будет начинаться от середины формы (по ширине) до ее левого края по X, и по всей высоте Y.

Для определения координат используется тип данных «TRect».

Он представляет из себя запись (record), в которой хранятся координаты верхнего левого угла и правого нижнего угла прямоугольника. А внутри этого «воображаемого» прямоугольника строится нужная фигура.

Для обработки кнопки «Эллипс» опишите процедуру:

7

procedure TForm1.Button1Click(Sender: TObject); var

Koordinaty: TRect;

Shirina, Vysota: Integer; begin

Shirina := Round(Width / 2); //Узнаем правую границу для рисования

Vysota := Round(Height / 2); //Центр по высоте Canvas.Brush.Color := clYellow; Canvas.Brush.Style := bsSolid;

Koordinaty.Left := Round((Vysota) - (Shirina / 2)); Koordinaty.Top := Round((Vysota) - (Shirina / 2)); Koordinaty.Right := Shirina;

Koordinaty.Bottom := Shirina; Canvas.Ellipse(Koordinaty);

end;

Для рисования квадрата опишите процедуру:

procedure TForm1.Button2Click(Sender: TObject); var

Koordinaty: TRect; Shirina, Vysota: Integer;

begin

Shirina := round(Width / 2); Vysota := Round(Height / 2); Canvas.Pen.Color := clGreen; Canvas.Brush.Color := clLime; Canvas.Brush.Style := bsSolid;

Koordinaty.Left := Round((Vysota) - (Shirina / 2)); Koordinaty.Top := Round((Vysota) - (Shirina / 2)); Koordinaty.Right := Shirina;

Koordinaty.Bottom := Shirina;

Canvas.FillRect(Koordinaty);

end;

Чтобы нарисовать прямоугольник и рамку используйте методы «FillRect» и «FrameRect» соответственно.

Выполните это самостоятельно.

Самостоятельная работа 1: Разберите методы «LineTo» и «MoveTo».

Примените их для рисования прямой линии.

Самостоятельная работа 2: Напишите программу, которая построит на экране ломаную линию, состоящую из 200 звеньев, окрашенных в разные цвета, выбираемые случайным образом. Линия должна строиться по случайным координатам (использовать функцию random) и не должна выходить за границы формы.

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

8

Обработчик события для рисования квадрата: procedure TfMain.Button1Click(Sender: TObject); var

R: TRect;

//Переменная для определения координат.

begin

 

 

R.Left:=10;

//Левая верхняя точка

R.Top:=10;

 

// Верхняя граница

R.Bottom:=Button1.Top-10;

// Нижняя граница

R.Right:=Width-R.Left-10;

//Правая нижняя точка

Canvas.FillRect(r);

//Рисуем квадрат с заливкой

end;

 

 

Пользовательская процедура для выбора цвета заливки квадрата:

procedure TfMain.mySetColor(C: TColor); begin

Canvas.Brush.Color:=C;

end;

Обработчики события для вызова пользовательской процедуры с передачей параметра цвета:

procedure TfMain.N1Click(Sender: TObject); begin

mySetColor(clRed);

end;

procedure TfMain.N2Click(Sender: TObject); begin

mySetColor(clBlue);

end;

procedure TfMain.N3Click(Sender: TObject); begin

mySetColor(clYellow);

end;

procedure TfMain.N4Click(Sender: TObject); begin

mySetColor(clGreen);

end;

9

Практическое задание 3. Написать программу, которая рисует эллипс определенного размера, а также создать обработку для вывода координат по вертикали и горизонтали при перемещении мыши по экрану.

procedure TfMain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);

begin

 

 

 

Label1.Caption := 'X = ' + IntToStr(x);

//Выводим координаты мыши по Гориз-ли

Label2.Caption := 'Y = ' + IntToStr(y);

//Выводим координаты мыши по Верт-ли

end;

 

 

 

procedure TfMain.Button1Click(Sender: TObject);

 

var

 

 

 

R: TRect;

 

//Переменная для определения координат

begin

 

 

 

if (Trim(Edit1.Text) = '

') or (Trim(Edit2.Text) = ' ') then

//А может там пусто?

begin

 

 

 

R.Left := 10;

//Задаем свои координаты

 

R.Top := 10;

 

 

 

R.Right := Width - 20; R.Bottom := Panel1.Top - 10;

end

else

begin

R.Left := StrToInt(Edit1.Text); //Берем заданные координаты R.Top := StrToInt(Edit2.Text);

R.Right := Width - 20; R.Bottom := Panel1.Top - 10;

end;

Canvas.Ellipse(R);

//Рисуем Эллипс!

end;

Практическое задание 4. Написать программу, которая наносит рисунок на холст (звезда и эллипс). Прорисовку рисунков выполнить двумя способами.

1.Использовать событие формы OnPaint для прорисовки геометрических примитивов.

2.Выполнить очистку холста.

3.Выполнить прорисовку фигур с другими координатами, используя элементы управления по собственному выбору.

10

procedure TForm1.FormPaint(Sender: TObject); begin

with Canvas do begin

pen.Color:= clgreen; polyline([point(100,50),point(60,150),point(160,90),point(40,90),point(140,150),point(100,50)]); pen.Color:= clred;

ellipse(0,0,210,40);

end;

end;

Практическое задание 5 Написать программу, которая наносит рисунки в окно для рисования PaintBox.

Назначение компонента TPaintBox – дать простое окно с канвой для рисования произвольных изображений. Канва содержится в свойстве Canvas компонента, графические инструменты - в свойствах Font, Pen и Brush, а собственно рисование осуществляется в обработчике события OnPaint.

Пример использования TPaintBox: procedure TFormI.PaintBox1Paint(Sender: TObject); var

X, Y: Integer;

begin

with PaintBox1, Canvas do begin

Brush.Color := clRed; Ellipse (0, 0, Width, Height); Font.Name := 'Arial'; Font.Size := Height div 5; Font.Style := [fsBold, fsltalic]; Font.Color := clWhite;

X := (Width - TextWidth('Delphi')) div 2; Y := (Height - TextHeight('D')) div 2; TextOut(X, Y, 'Delphi')

end end;

При повторении примера положите на пустую форму компонент

TPaintBox и установите его размеры: Height = 100/ Width = 300.

Самостоятельная работа 3: Написать программу, которая рисует олимпийский

флаг в окне PaintBox.