Методические рекомендации
1.5.1 Объектный тип данных. Описание класса.
Тип объект (Object) можно рассматривать как усовершенствование типа запись (Record): описание свойств, параметры моделируемой сущности (они занимают поля объекта) дополняются методами - описаниями действий с объектом. Собственно, в описании объектного типа дают лишь заголовки соответствующих блоков, а сами блоки приводят ниже. Имеется и еще одно чисто формальное отличие от описания записи: вместо Record используется слово Object. Переменные объектного типа называются экземплярами объекта. В отличие от типа «запись» объектный тип содержит не только поля, описывающие данные, но также процедуры и функции, описания которых содержаться в описании объекта. Эти процедуры и функции и являются методами. Методам объекта доступны его поля. Методы и их параметры определяются в описании объекта, а их реализация дается вне этого описания, в том месте программы, которое предшествует вызову данного метода. В описании объекта содержатся лишь шаблоны обращений к методам, которые необходимы компилятору для проверки соответствия количества параметров и их типов при обращении к методам.
Описание объектного типа осуществляется в секции interface программного модуля (см. рис.1).
Рисунок 1 – Описание объектного типа TFigura
Реализация описанных в объектном типе методов происходит в секции implementationпрограммного модуля. Имя метода является составным: в начале указывается тип объекта, а затем сам метод.
….
Implementation
Procedure TFigura.Draw(c:TColor);
Begin
// тело метода;
End;
1.5.2 Графические возможности Delphi. Canvas
Работа с графикой в Delphi предполагает обращение к свойству Canvas компонентов. Для программиста Canvas в Delphi – это холст (канва), который дает доступ к каждому пикселю. Конечно, рисовать попиксельно для работы с графикой в Delphi не приходится, система Delphi предоставляет мощные средства работы с графикой, облегчающие задачу программиста.
В работе с графикой в Delphiв распоряжении находится канва(свойство Canvas Delphi компонентов), кисть(свойство Brush), карандаш(свойство Pen) компонента, на котором планируется рисовать. У Penи Brush есть свойство Color(цвет) и Style(стиль). Чтоб получить доступ к шрифтам, предоставлено свойство холста(Canvas) Font.
Таблица 1 – Свойства объекта Pen(Карандаш)
Свойство | Описание |
Color | Цвет линии |
Width | Толщина линии (задается в пикселах) |
Style | Вид линии: psSolid ― сплошная; psDash ― пунктирная, длинные штрихи; psDot - пунктирная, короткие штрихи; psDashDot ― пунктирная, с чередованием длинного и короткого штрихов; psDashDotDot ― пунктирная с чередованием одного длинного и двух коротких штрихов; psClear ― линия не отображается (используется, если не надо изображать границу области, например, прямоугольника) |
Таблица 2 – Свойства объекта Brush(Кисть)
Свойство | Описание |
Color | Цвет закраски замкнутой области. |
Style | Стиль закраски области:― сплошная заливка; штриховка: bsHorizontal―горизонтальная; bsVertical―вертикальная; bsFDiagonal ― диагональная с наклоном линии вперед; bsBDiagonal ― диагональная с наклоном линии назад; bsCross―диагональная клетка. |
Таблица 3 – Основные свойства класса TFont
Свойство | Описание |
Name | Шрифт, который используется для отображения текста. В качестве значения следует брать название шрифта, например Arial. |
Size | Размер шрифта |
Style | Стиль начертания символов. Задается с помощью констант: fsBold(полужирный), fsItalic(курсив), fsUnderline(подчеркнутый), fsStrikeOut(перечеркнутый). Свойство Style является множеством, что позволяет комбинировать необходимые стили. Например, инструкция, которая устанавливает стиль «полужирный курсив», выглядит так: Font.Style := [fsBold, fsItalic] |
Color | Цвет символов. В качестве значения можно использовать константу типа TColor. |
Не все компоненты в Delphi имеют эти свойства. Свойство Canvasимеют, например, такие компоненты как ListBox, ComboBox, StringGrid, а также и сама форма, которая размещает компоненты.
Холст для рисования Canvas, представляет собой перевернутую систему координат XOY, где О эта верхняя левая точка компонента или формы.
Таблица 4 – Константы TColor
Цвет | Константа |
Бирюзовый | clAqua |
Черный | clBlack |
Синий | clBlue |
Ярко-розовый | clFuchsia |
Зеленый | clGreen |
Салатовый | cLime |
Каштановый | clMaroon |
Темно-синий | clNavy |
Оливковый | clOlive |
Фиолетовый | clPurple |
Красный | clRed |
Серебристый | clSilver |
Зелено-голубой | clTeal |
Белый | clWhite |
Основное свойство такого объекта как Canvas Delphi - Pixels[i,j] типа TColor, то есть это двумерный массив точек (пикселов), задаваемых своим цветом.
Рисование на канве происходит в момент присвоения какой-либо точке канвы заданного цвета. Каждому пикселу может быть присвоен любой доступный для Windows цвет.
Например:
Form1.Canvas.Pixels[100, 100] := clRed;
приведёт к рисованию красной точки с координатами [100, 100].
Узнать цвет пиксела можно обратным присвоением:
Color :=Form1.Canvas.Pixels[100,100];
Таблица 5 – Свойства класса TCanvas
Свойство | Описание |
Pen | Карандаш. Определяет цвет, стиль и толщинц линии, которую рисует, например метод Lineto |
PenPos | Положение (координаты) карандаша |
Brush | Кисть. Определяет цвет и стиль закраски области, например прямоугольника, который рисует метод Rectangle. |
Font | Шрифт. Определяет шрифт, который используется для вывода текста, например методом TextOut. |
Таблица 6 – Методы класса TCanvas
Метод | Действие |
Lineto(x, y) | Рисует линию из текущей точки в точку с указанными координатами (перемещение указателя текущей точки в нужную обеспечивает метод Moveto). Цвет линии определяется свойством Pen.Color . |
Rectangle(x1 ,y1 ,x2, y2) | Рисует прямоугольник. Параметры x1, y1указывают координаты верхней левой точки, аx2, y2 координаты нижней правой точки. Цвет границы прямоугольника определяет свойство Pen.Color , цвет закраски области ― свойствоBrush.Color . |
RoundRect(x1, y1, x2, y2, x3, y3) | Рисует прямоугольник со скругленными углами. Параметры x1, y1 указывают координаты верхней левой точки, x2, y2 координаты нижней правой точки, а x3, y3 радиус скругления. Цвет границы прямоугольника определяет свойство Pen.Color ,цвет закраски области ― свойство Brush.Color . |
Продолжение таблицы 6
Ellipse(x1, y1, x2, y2) | Рисует эллипс (окружность). Параметры x1, y1 указывают координаты верхней левой точки, аx2, y2 координаты нижней правой точки прямоугольника в который вписана окружность. Цвет границы прямоугольника определяет свойство Pen.Color , цвет закраски области ― свойство Brush.Color . |
Arc(x1, y1, x2, y2, x3, y3,x4, y4) | Рисует дугу. Параметры x1, y1, x2 и y2 задают эллипс, частью которого является дуга, параметры x3, y3, x4 и y4 ― начальную и конечную точку дуги. Цвет дуги определяет свойство Pen.Color. |
Pie(x1 ,y1 ,x2 ,y2 ,x3 ,y3 ,x4 ,y4) | Рисует сектор. Параметры x1, y1, x2 и y2 задают эллипс, частью которого является сектор, параметры x3, y3, x4 и y4 ―границы сектора. Цвет границы сектора определяет свойствоPen.Color , цвет закраски сектора ― свойствоBrush.Color . |
FillRect(aRect) | Рисует закрашенный прямоугольник. Параметр aRect(тип TRect) определяет положение и размер прямоугольника. Цвет закраски области определяет свойство Brush.Color . |
FrameRect(aRect) | Рисует контур прямоугольника. ПараметрaRect(тип TRect) определяет положение и размер прямоугольника. Цвет контура определяет свойство Brush.Color . |
Polyline(points, n) | Рисует ломаную линию. Points ― массив типаTPoint. Каждый элемент массива представляет собой запись, поля x и y, которые содержат координаты точки перегиба ломаной. n ―количество звеньев ломаной. Метод Polyline вычерчивает ломаную линию, последовательно соединяя прямые точки, координаты которых находятся в массиве: первую со второй, вторую с третьей, третью с четвертой и т.д. |
Вычерчивание графических элементов на графической поверхности, например компонента Image (закладка Additional), выполняют соответствующие методы класса TCanvas.
Инструкция, обеспечивающая вычерчивание графического элемента, в общем виде выглядит так:
Объект.Canvas.Метод(Параметры);
Объект определяет объект, на поверхности которого нужно нарисовать графический элемент. В качестве объекта можно указать компонент Image.
Метод – это имя метода, который обеспечивает рисование нужного графического элемента.
Параметры, в большинстве случаев, определяют положение графического элемента на графической поверхности и его размер.
Например в результате выполнения инструкции
Form1.Canvas.Rectangle(10,20,60,40);
В поле компонента Form1 будет нарисован прямоугольник шириной 50 и высотой 20 пикселов, левый верхний угол которого будет находиться в точке(10,20).
При записи инструкций, обеспечивающих вывод графики, удобно использовать инструкцию with, которая позволяет сократить количество набираемого кода.
Вывод строки текста на графическую поверхность объекта обеспечивает методTextOut. Инструкция вызова метода TextOut в общем виде выглядит следующим образом:
Объект.Canvas.TextOut(x, y, '*Текст*');
Параметры x, y определяют координаты точки графической поверхности, от которой выполняется вывод текста.
Шрифт, используемый для отображения текста, определяет свойство Font графической поверхности, на которую текст выводится. СвойствоFont представляет собой объект типа TFont.
1.5.3 Создание простого класса фигур
Для начала работы над проектом необходимо запустить среду программирования Delphi.
Внутри программного модуля описать объектный тип данных TFigura
type
TFigura=class
procedure Draw (c:TColor);
end;
Организовать дочерний тип данных
TLine=class(TFigura)
procedure Resize(xx,yy:integer);
end;
В глобальном разделе переменных объявить объект класса TLine
var
Form1: TForm1;
L:TLine;
В секции implementation организовать реализацию описанных методов
implementation
{$R *.dfm}
procedureTFigura.Draw(c:Tcolor);
begin
form1.canvas.pen.color:=c;
end;
procedureTLine.Resize(xx,yy:integer);
begin
form1.canvas.LineTo(xx,yy);
end;
Окно приложения Delphi состоит из нескольких окон. В окно формы необходимо поместить со вкладки Standart объект Button1 (см.рисунок 2).
Рисунок 2 – Вкладка Standart
Для объекта Button1изменить свойство Caption на «Нарисовать объект»
Рисунок 3 – Свойства объекта Button1
Для объекта Button1 организовать событие OnClick, прописать следующий код:
procedure TForm1.Button1Click(Sender: TObject);
begin
xn:=40;
yn:=50;
cl:=clRed;
L.Draw(cl);
L.Resize(xn,yn);
end;
Варианты индивидуальных заданий
1) Класс объектов «Окружность». Методы изменение цвета контура и радиуса;
2) Класс объектов «Квадрат». Методы рисование квадрата, изменение его положения (по горизонтали);
3) Класс объектов «Прямоугольник». Методы изменение цвета контура и размера;
4) Класс объектов «Скругленный прямоугольник». Методы изменение размера и контура фигуры;
5) Класс объектов «Окружность». Методы изменение цвета заливки и положения (по вертикали);
6) Класс объектов «Прямоугольник». Методы изменение стиля заливки и положения (по горизонтали);
7) Класс объектов «Квадрат». Методы изменение стиля заливки и цвета контура;
8) Класс объектов «Сектор». Методы Изменение цвета контура и стиля заливки;
9) Класс объектов «Скругленный прямоугольник». Методы изменение размеров и цвета контура;
10) Класс объектов «Сектор». Методы изменение размеров и цвета заливки;
11) Класс объектов «Окружность». Методы изменение положения и стиля контура;
12) Класс объектов «Овал». Методы изменение горизонтального радиуса и цвета заливки;
13) Класс объектов «Квадрат». Методы изменение размера и цвета заливки;
14) Класс объектов «Овал». Методы изменение положения (по горизонтали) и изменение стиля контура;
15) Класс объектов «Прямоугольник». Методы изменение положения (по вертикали) и цвета заливки.