34659

Графические возможности Delphi, система координат

Реферат

Информатика, кибернетика и программирование

Методы вывода графических примитивов рассматривают свойство Cnvs как некоторую поверхность на которой можно рисовать. Координаты области вывода Метод построения графического примитива в общем случае имеет следующий синтаксис...

Русский

2015-01-18

407.3 KB

24 чел.

Графические возможности Delphi

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

Для отображения графической информации в библиотеке Delphi предусмотрены компоненты, список которых дан в следующей таблице:

 

Пиктограмма

Название

Страница

Назначение

Image (изображение)

Additional

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

Shape (форма)

Additional

Используется для построения геометрических примитивов

DrawGrid (таблица рисунков)

Additional

Используется для отображения в строках и столбцах нетекстовых данных

Chart (диаграммы и графики)

Additional

Используется для создания диаграмм и графиков

PaintBox (окно для рисования)

System

Используется для создания на форме некоторой области, в которой можно рисовать

 

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

Класс TCanvas не является компонентом, а входит в качестве свойства во многие визуальные компоненты: TBitmap, TComboBox, TDBComboBox, TDBGrid, TDBListBox, TDirectoryListBox, TDrawGrid, TFileListBox, TForm, Tlmage, TListBox, TOutline, TPaintBox, TPrinter, TStringGrid. Canvas обеспечивает пространство (холст, канву) для создания, хранения и модификации графических объектов. Canvas является основой графической подсистемы Delphi. Канва обеспечивает:

Ø  Загрузку и хранение графических изображений

Ø  Создание новых и изменение хранимых изображений с помощью пера, кисти, шрифта

Ø  Рисование и закраску различных фигур, линий, текстов

Ø  Комбинирование различных изображений

Система координат

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

Обратите внимание. Точка (0,0) находится в левом верхнем углу. Привычная для нас система координат “перевернута”

Каждая точка на самом деле представляет собой очень маленький прямоугольник (И поскольку это не совсем точка, то используются термин — “пиксел”). На канве можно представить наличие невидимого курсора, который определяет текущее положение карандаша. Для ряда случаев рисование тех или иных примитивов (например, линии) начинается с текущего положения этого курсора. Имеются средства установки курсора, в заданное положение. При выполнении некоторых операций курсор меняет свое положение.

Основные свойства класса TCanvas представлены в табл. 1.

Таблица 1.4. Свойства класса TCanvas

Для того чтобы на поверхности объекта появилась картинка (например, содержимое jpg-файла), текст или графический примитив (точка, линия, прямоугольник, окружность и т.п.), необходимо к свойству Canvas применить соответствующий метод, обеспечивающий отображение иллюстрации, вывод текста или вычерчивание графического примитива. При отображении фигур контур изображается карандашом Pen с установленными в нем характеристиками. Если фигура является замкнутой, ее поверхность закрашивается кистью Brush с установленными в ней характеристиками. Все тексты изображаются шрифтом Font с заданными характеристиками. Во время выполнения приложения эти характеристики можно изменять, но эти изменения должны быть выполнены до того момента, как соответствующий инструмент будет использован для отображения графического примитива.

Методы вывода графических примитивов рассматривают свойство Canvas как некоторую поверхность, на которой можно рисовать. Графическая поверхность состоит из отдельных точек – пикселей. Положение точки характеризуется горизонтальной и вертикальной координатами (x, y). Координата (0,0) - это координаты верхнего левого пикселя, т.е. верхнего левого угла графической поверхности. Координаты возрастают сверху вниз и слева направо, то есть значения по оси Оу увеличиваются вниз экрана.

Координаты области вывода

Метод построения графического примитива в общем случае имеет следующий синтаксис: Компонент.Canvas.Metod(параметры_метода);

Методы рисования класса TCanvas

Arc - Рисует дугу окружности или эллипса

Arc(x1,y1,x2,y2,x3,y3,x4,y4: Integer)

Метод Arc рисует дугу окружности или эллипса с помощью текущих параметров пера Pen (эти параметры мы рассмотрим чуть ниже). Точки (x1,y1) и (x2,y2) определяют прямоугольник, описывающий эллипс. Начальная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (x3,y3).Конечная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (x4,y4). Дуга рисуется против часовой стрелки от начальной до конечной точки.

Пример.

Image1.Canvas.Arc(0,0, 200,200, 200,0, 0,0);

Image2.Canvas.Arc(0,0, 200,200, 0,0, 200,0);

Chord - Рисует заполненную замкнутую фигуру, ограниченную дугой окружности или эллипса и хордой

Chord (x1,y1,x2,y2,x3,y3,x4,y4:Integer);

Метод Chord рисует замкнутую фигуру: дугу окружности или эллипса, замкнутую хордой, с помощью текущих параметров пера Pen. Фигура заполняется текущим значением Brush (рассмотрим чуть ниже). Точки (x1,y1) и (x2,y2) определяют прямоугольник, описывающий эллипс. Начальная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (x3,y3).Конечная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (x4,y4). Дуга рисуется против часовой стрелки от начальной до конечной точки. Хорда соединяет точки(x3,y3) и (x4,y4).

Пример.

Image1.Canvas.Chord(0,0, 200,200, 200,0, 0,0);

Image2.Canvas.Chord(0,0, 200,200, 0,0, 200,0);

Draw - Рисует графическое изображение в указанную позицию канвы

Draw (x,y:Integer;Graphic:TGraphic);

Метод Draw рисует изображение, содержащееся в объекте, указанном параметром Graphic, сохраняя исходный размер изображеня в его источнике и перенося изображение в область канвы объекта TCanvas, верхний левый угол которой определяется параметрами x и y. Источник изображения может быть битовой матрицей, пиктограммой или метафайлом.

Пример.

Form1.Canvas.Draw(10,10,Bitmap1);

Рисует на канве формы Form1 изображение из компонента Bitmap1 в область с координатами левого верхнего угла (10,10).

DrawFocusRect - Рисует изображение прямоугольника в виде, используемом для отображения рамки фокуса, операцией XOR

DrawFocusRect (constRect:TRect);

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

Ellipse - Рисует заполненную окружность или эллипс

Ellipse (x1,y1,x2,y2:Integer);

Метод Ellipse рисует окружность или эллипс с помощью текущих параметров пера Pen. Фигура заполняется текущим значением Brush. Точки (x1,y1) и (x2,y2) определяют прямоугольник, описывающий эллипс.

FillRect - Заполняет указанный прямоугольник канвы, используя текущее значение Brush.

FillRect(const: TRect);

Метод FillRect заполняет прямоугольник канвы, указанный параметром Rect, используя текущее значение Brush. Заполняемая область включает верхнюю и левую стороны прямоугольника, но не включает правую и нижнюю стороны.

Пример.

Image1.Canvas.FillRect(Rect(0,0,Width,Height));

Очищает всю канву компонента Image1, заполняя ее фоном, если он установлен в свойстве Brush.

FloodFill - Закрашивает текущей кистью замкнутую область канвы, определенным цветом.

Type TFillStyle = (fsSurfase, fsBorder);

Procedure FloodFill (x,y:Integer;Color:TColor;FillStyle:TFillStyle);

Метод FloodFill закрашивает текущей кистью Brush замкнутую область канвы, определенным цветом и начальной точкой закрашивания (x,y). Точка с координатами x и y является произвольной внутренней точкой заполняемой области, которая может иметь произвольную форму. Граница этой области определяется сочетанием параметров Color и FillStyle. Параметр Color указывает цвет, который используется при определении границы закрашиваемой области, а параметр FillStyle определяет, как именно по этому цвету определяется граница. Если FillStyle = fsSurface, то заполняется область, закрашенная цветом Color, а на других цветах метод останавливается. Если FillStyle = fsBorder, то наоборот, заполняется область окрашенная любыми цветами, не равными Color, а на цвете Color метод останавливается.

Примеры.

1.

With Image1.Canvas do begin

 Brush.Color:=clWhite;

 FloodFill(X,Y,Pixels[X,Y],fsSurface);

End;

Приведенные операторы закрашивают белым цветом на канве компонента Image1 все пиксели, прилегающие к пикселю с координатами (x,y) и имеющие тот же цвет, что и этот пиксель.

FrameRect - Рисует на канве текущей кистью прямоугольную рамку.

FrameRect(constRect:TRect);

Метод FrameRect рисует на канве прямоугольную рамку вокруг области Rect, используя установку текущей кисти Brush. Толщина рамки — 1 пиксель. Область внутри рамки кистью не закрашивается. Отличается от метода Rectangle тем, что рамка рисуется цветом кисти (в методе Rectangle — цветом пера Pen) и область не закрашивается (в методе Rectangle закрашивается).

Пример.

With Form1.Canvas do

 Begin

 Brush.Color:=clBlack;

FrameRect(Rect(10,10,100,100));

End;

Рисует на канве формы Form1 черную рамку.

LineTo - Рисует на канве прямую линию, начинающуюся с текущей позиции пера и кончающуюся указанной точкой.

LineTo (x,y:Integer);

Метод LineTo рисует на канве прямую линию, начинающуюся с текущей позиции пера PenPos и кончающуюся точкой (x,y). Текущая позиция пера PenPos перемещается и кончающуюся точкой (x,y), исключая саму точку (x,y). Текущая позиция пера PenPos перемещается в точку (x,y). При рисовании используются текущие установки пера Pen.

Пример.

Form1.Canvas.MoveTo(x1,y1);

Form1.Canvas.LineTo(x2,y2);

Form1.Canvas.LineTo(x3,y3);

Рисует кусочно-ломаную прямую, соединяющую точки (x1,y1), (x2,y2) и (x3,y3).

MoveTo -Изменяет текущую позицию пера на заданную, ничего не рисуя при этом.

MoveTo(x,y:Integer);

Метод MoveTo изменяет текущую позицию пера на заданную точкой (x,y). Это эквивалентно непосредственной установке свойства PenPos. При перемещении пера методом MoveTo ничего не рисуется.

Pie - Рисует заполненную замкнутую фигуру — сегмент окружности или эллипса.

Pie (x1,y1,x2,y2,x3,y3,x4,y4:Longint);

Метод Pie рисует замкнутую фигуру — сектор окружности или эллипса, с помощью текущих параметров пера Pen. Фигура заполняется текущим значением Brush. Точки (x1,y1) и (x2,y2) определяют прямоугольник, описывающий эллипс. Начальная точка дуги определяется пересечением эллипса с прямой, проходящейчерез его центр и точку (x3,y3). Конечная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (x4,y4). Дуга рисуется против часовой стрелки от начальной до конечной точки. Рисуются прямые, ограничивающие сегмент и проходящие через центр эллипса и точки (x3,y3) и (x4,y4).

Пример.

Image1.Canvas.Pie(0,0, 200,200, 200,0, 0,0);

Image2.Canvas.Pie(0,0, 200,200, 0,0, 200,0);

Polygon - Рисует на канве текущим пером замкнутую фигуру (многоугольник) по заданному множеству угловых точек, замыкая первую и последнюю точки и закрашивая внутреннюю область фигуру текущей кистью.

Polygon (Points: arrayofTPoint);

Метод Polygon рисует на канве замкнутую фигуру (полигон, многоугольник) по множеству угловых точек, заданному массивом Points. Первая из указанных точек соединяется прямой с последней. Этим метод Polygon отличается от метода Polyline, который не замыкает конечные точки. Рисование проводится текущим пером Pen. Внутренняя область фигуры закрашивается текущей кистью Brush.

Примеры.

1

Form1.Canvas.Polygon([Point(10,10),Point(30,10),Point(130,30),Point(240, 120)]);

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

Polyline - Рисует на канве текущим пером кусочно-линейную кривую по заданному множеству точек.

Polyline(Points: array of TPoint);

Метод Polyline рисует на канве кусочно-линейную кривую по множеству точек, заданному массивом Points. Отличие метода Polyline от метода Polygon заключается в том, что метод Polygon замыкает конечные точки, а метод Polyline — нет. Рисование проводится текущим пером Pen. Метод не изменяет текущей позиции PenPos пера Pen.

Метод позволяет рисовать кусочно-линейный график функции, хранящийся в массиве типа TPoint. Если желательно использовать для рисования только часть точек массива, это можно сделать с помощью функции Slice. Если надо нарисовать кривую всего по нескольким точкам, то передавать их в метод Polyline удобно с помощью функции Point.

То что делает метод Polyline, можно сделать и с помощью методов MoveTo и LineTo, подведя сначало перо к первой точке, а затем последовательно выполняя LineTo. Различие будет заключаться в том, что метод Polyline не изменит текущую пера, а методы MoveTo и LineTo изменят.

Примеры.

1

Form1.Canvas. Polyline([Point(10,10),Point(30,10),Point(130,30),Point(240, 120)]);ться в том, что метод Polylineщью методов MoveTo и LineTo, подведя сначало перо к первой точке, а затем по

Рисует кусочно-линейную кривую по четырем точкам, заданным функциями Point.

Rectangle - Рисует на канве текущим пером прямоугольник и закрашивает его текущей кистью.

Rectangle(x1,y1,x2,y2:Integer);

Метод Rectangle рисует на канве текущим пером Pen прямоугольник, верхний левый угол которого имеет координаты (x1,y1), а нижний правый — (x2,y2). Прямоугольник закрашивается текущей кистью Brush. Рисование прямоугольника без рамки можно осуществить методом FillRect. Прямоугольник со скругленными углами рисуется методом RoundRect. Прямоугольникбез внутренней закраски рисуется методом FrameRect.

Пример.

Image1.Canvas.Rectangle(10,10,210,110);

RoundRect - Рисует на канве прямоугольную рамку со скругленными углами.

RoundRect(x1,y1,x2,y2,x3,y3:Integer);

Метод RoundRect рисует на канве прямоугольную рамку со скругленными углами, используя текущие установки пера Pen и заполняя площадь фигуры текущей кистью Brush. Рамка определяется прямоугольником с координатами углов (x1,y1) и (x2,y2). Углы скругляются с помощью эллипсов с шириной x3 и высотой y3.

Если задать ширину эллипса x3 x2-x1, то верхняя и нижняя границы рамки окажутся целиком скругленными (без прямолинейной части). Если y3 y2-y1, то же самое произойдет с левой и правой границами рамки. Если же оба измерения эллипса не меньше размеров рамки, то будет рисоваться просто эллипс. Но, конечно, для рисования эллипса лучше использовать метод Ellipse. Если один из размеров эллипса задать нулевым, то будет рисоваться прямоугольная рамка, а для получения такой рамки лучше использовать метод Rectangle.

Пример.

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

with Image1.Canvas do

 begin

  RoundRect(10,10,110,210,50,100);

  RoundRect(160,10,260,210,100,100);

  RoundRect(310,10,410,210,50,200);

  RoundRect(460,10,560,210,100,200);

 end;

Основные свойства Canvas

Brush - Определяет цвет и стиль заполнения фона окна. Доступен только для чтения.

Brush: TBrush;

Свойство Brush (кисть) присуще многим оконным объектам, включая Canvas. Его можно читать, чтобы определить цвет и стиль заполнения фона окна. Это свойство только для чтения. Однако, атрибуты объекта Brush можно изменять, используя свойства Color и Style.

Color - Цвет фона компонента, цвет текста, объекта, TFont и др.

Color: TColor;

Свойство Color определяет цет фона компонента. Значение цвета может задаваться как значение, определяющее интенсивности красного, зеленого и синего цветов в формате RGB (Например: Form1.Canvas.Brush.Color:= RGB (88, 87, 104)) или равным одной из предопределенных в Delphi констант. Ниже приведены некоторые из них.

Константа

Значение цвета

clBlack

Черный

clMaroon

Темно-бордовый

clGreen

Зеленый

clOlive

Оливково-зеленый

clNavy

Темно-синий

clPurple

Пурпурный

clTeal

Морской воды

clGray

Серый

clSilver

Серебряный

clRed

Красный

clLime

Лимонно-зеленый

clBlue

Синий

clYellow

Желтый

clFuchsia

Сиреневый

clAqua

Голубой

clWhite

Белый

clBackground

Текущий цвет фона стола Windows

clScrollBar

Текущий цвет полос прокрутки

Style

Style: TBrushStyle default bsSolid;

Свойство Style определяет шаблон, которым кисть заполняет фон объекта. Возможные значения свойстаStyle:

Pen - Определяет свойства пера, используемые при рисовании линий и фигур на канве.

Основные свойста:

Color — цвет пера. По умолчанию clBlack.

Style — определяет режимрисования линий.

psSolid

Сплошная линия

psDash

Штриховая линия

psDot

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

psDashDot

Штрих-пунктирная линия

psDashDotDot

Линия, чередующая штрих и два пунктира

psClear

Отсутствующая линия

psInsideFrame

Сплошная линия, но при width> 1 допускающая цвета, отличные от палитры windows.

Width — определяет толщину линии в пикселях. Тип Integer. Влияет на Style.

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

TPoint=record
x:Longint;
y: Longint
end;
TRect=record
Case integer of
0:(Left,Top,Right,Bottom: integer);
1:(TopLeft, BottomRight: TPoint)
end
end;

Заполнить поля структуры TRect можно при помощи функции Bounds, обращение к которой в общем случае имеет вид:

Bounds(x, y, w, h)

где: x и y – координаты левого верхнего угла области; w и h – ширина и высота области.

Пример использования структур TPoint и TRect:

procedureTForm1.Button1Click(Sender: TObject);
var
p1, p2: TPoint;
r1, r2: TRect;
begin
p1.X:=50; p1.Y:=50; //координаты первой точки
p2.X:=100; p2.Y:=100; //координаты второй точки
//Зададим координаты углов прямоугольников
r1:=Rect(p1,p2);
r2:=Rect(10,10,100,100);
withForm1.Canvasdo
begin
Brush.Color:=clYellow; //цвет кисти
FillRect(r1); //закрашенный прямоугольник
Pen.Color:=clRed; //цвет пера
MoveTo(p1.X, p1.Y); //перемещение курсора
LineTo(p2.X, p2.Y); //проводим линию
Brush.Color:=clBlue; //цвет кисти
FrameRect(r2) //граница прямоугольника
end
end;

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

Значения параметров некоторых методов рисования


 

А также другие работы, которые могут Вас заинтересовать

84922. Маркетинговое исследование компании Tommy Hilfiger 152.22 KB
  Увеличение количества располагаемого дохода в странах с развивающейся экономикой Острая конкуренция со стороны международных брендов Экономический спад который приведет к сокращению спроса на одежду премиумкласса по цене продуктов Постоянно меняющиеся модные тенденции означает вопросы запасов инвентаризации...
84923. Состав и классификация бухгалтерской (финансовой) отчетности 92.02 KB
  Целью исследования в данной курсовой работе является рассмотрение сущности и классификации бухгалтерской отчетности, и ее составляющих. Для этого необходимо выполнение следующих задач: определить сущность бухгалтерской отчетности и ее значение в деятельности организации...
84925. Поняття про односкладне речення. Види односкладних речень. Способи вираження в них головного члена. Стилістичне використання односкладних речень 131.5 KB
  Організувати групову діяльність студентів у мікрогрупах, спрямовану на самостійне вивчення істотних ознак односкладних речень, їх основних видів, способів вираження в них головного члена; формувати уміння визначати вид односкладних речень, розрізняти їх між собою; розвивати уміння виконувати елементи...
84926. Поняття про речення. Закріплення вивченого про речення в 1-2-му класах 157 KB
  Мета уроку: закріплювати знання учнів про основні ознаки речення; розвивати увагу вміння зіставляти мовні явища; розвивати вміння працювати в групах; виховувати мовленнєву культуру. Узагальнення знань про речення. З чого складається наше мовлення Що виражає речення Як пишуться слова у реченні...
84927. Загальні поняття про дієслово. Зв’язок дієслова з іменником у реченні. Складання речень за малюнками 287 KB
  Мета: розширити і поглибити знання учнів про граматичні ознаки дієслова; формувати вміння розпізнавати дієслова серед інших частин мови; розпізнавати дієслово в реченні тексті; ставить до них запитання; вчити доцільно і правильно вживати дієслова у власних висловлюваннях...
84928. Українська народна колискова пісня «Пішла киця по водицю» 81 KB
  Мета: вивчити та засвоїти слова до теми, ознайомити з українською народною піснею Пішла киця по водицю. Активізувати словниковий запас дітей. Удосконалювати і розвивати орфоепічні вміння; пам’ять, увагу, спостережливість. Виховувати любов до усної народної творчості, співчуття, уміння активно допомагати...
84929. У країні ввічливості. Скажи людині: «Доброго дня» за В. Сухомлинським 70 KB
  Мета: вивчити та засвоїти слова ввічливості; формувати вміння побудови зв’язних висловлювань на матеріалі малюнків та власного життєвого досвіду. Удосконалювати і розвивати орфоепічні вміння; пам’ять, увагу, спостережливість. Виховувати взаємоповагу, взаємодопомогу, ввічливе ставлення до однокласників та старших.