Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Содержание
Введение
Глава 1. Графика в Delphi
1.1Объекты: Brush,Pen
1.2 Объект Front
1.3 Способы рисования прямоугольников
Глава 2. Программа иллюстрирующая рисования прямоугольников
2.1. Результат работы
2.2 Блок-схемы алгоритма
Заключение
Литература
Приложение
П.1. Листинг программы
1. Введение
Данная работа посвящена теме «Программа, иллюстрирующая работу с графикой в Delphi на примере рисования прямоугольников».
Цель данной работы: создание программы, иллюстрирующей работу с графикой в Delphi на примере рисования прямоугольников, при этом необходимо предусмотреть возможность изменения размера и положения прямоугольника, цвет, стиль контура и заливку.
Для решения поставленной цели были определены следующие задачи:
-изучение системы программирования Delphi;
-изучение основных понятий и терминов;
-приобретение практических навыков в создании программы.
Глава 1. Графика в Delphi
Delphi позволяет программисту разрабатывать программы, которые могут выводить графику: схемы, чертежи, иллюстрации.
Программа выводит графику на поверхность объекта (формы или компонента Image). Поверхности объекта соответствует свойствоcanvas.
Свойство canvas это объект типаTCanvas. Методы этого типа обеспечивают вывод графических примитивов (точек, линий, окружностей, прямоугольников и т. д.), а свойства позволяют задать характеристики выводимых графических примитивов: цвет, толщину и стиль линий; цвет и вид заполнения областей; характеристики шрифта при выводе текстовой информации.
Методы вывода графических примитивов рассматривают свойствоCanvasкак некоторый абстрактный холст, на котором они могут рисовать. Холст состоит из отдельных точек пикселов. Положение пиксела характеризуется его горизонтальной (X) и вертикальной (Y) координатами. Левый верхний пиксел имеет координаты (0, 0). Координаты возрастают сверху вниз и слева направо. Значения координат правой нижней точки холста зависят от размера холста.
Размер холста можно получить, обратившись к свойствамHeightиwidthобласти иллюстрации (image) или к свойствам формы:ClientHeightиClientwidth.
Методы класса TCanvas
Основные методы, объявленные в классе TCanvas.
Метод |
Объявление / Описание |
Arc. procedure Arc(Xl, Yl, Х2, Y2, ХЗ, Y3, Х4, Y4: Integer); |
Рисует дугу окружности или эллипса. (XI,Y1) и (X2,Y2) определяют описанный прямоугольник, (X3,Y3) и (X4,Y4) точки, через которые проходят радиусы, отмечающие начало и конец дуги. |
Chord, procedure Chord(Xl, Yl, Х2, Y2, ХЗ, Y3, Х4, Y4: Integer); |
Рисует замкнутую фигуру, ограниченную дугой (окружности или эллипса) и хордой. (XI,Y1) и (X2,Y2) определяют описанный прямоугольник. (X3,Y3) и (X4,Y4) точки, через которые проходит хорда. |
Draw, procedure Draw(X, Y: Integer; Graphic: TGraphic): |
Выводит графическое изображение Graphic в указанную позицию канвы (X, Y левый верхний угол). |
Ellipse, procedure Ellipse(Xl, Yl, X2, Y2: Integer) |
Рисует окружность или эллипс. (XI, Yl) и (Х2, Y2) определяют описанный прямоугольник. |
FillRect, procedure FillRect(constRect: TRect); |
Заполняет указанный прямоугольник канвы, используя текущее значение кисти Brush. |
FloodFill, procedure FloodFill(X, Y: Integer: Color: TColor: FillStyle: TFillStyle); |
Закрашивает текущей кистью замкнутую область канвы, определенную цветом Color и начальной точкой закрашивания (X, Y). При FillStyle = fsSurface заполняется область, окрашенная цветом Color, а при FillStyle =fsBorder, заполняется область, окрашенная любыми цветами, не равными Color. |
FrameRect, procedure FrameRect(constRect: TRect); |
Рисует на канве текущей кистью прямоугольную рамку толщиной в 1 пиксель без заполнения внутренней части прямоугольника. |
LineTo, procedure LineTo(X, Y: Integer); |
Рисует на канве прямую линию, начинающуюся с текущей позиции пера и кончающуюся указанной точкой (исключая ее). |
MoveTo, procedure MoveTo(X, Y: Integer); |
Изменяет текущую позицию пера на заданную, ничего не рисуя. |
Pie, procedure Pie(Xl, Yl, Х2, Y2, ХЗ, Y3, Х4, Y4: Longint); |
Рисует сектор окружности или эллипса. (XI,Y1) и (X2,Y2) определяют описанный прямоугольник. (X3,Y3) и (X4,Y4) точки, через которые проходят радиксы, ограничивающие сектор. |
Polygon, procedure Polygon(Points: array of TPoint); |
Рисует замкнутую фигуру с кусочно-линейной границей. |
Polvline, procedure Polyline(Points: array of TPoint); |
Рисуеткусочно-линейнуюкривую. |
Rectangle, procedure Rectangle(Xl, Yl, X2, Y2: Integer); |
Рисует прямоугольник, заданный (X1, Y1) и (Х2, Y2). |
RoundRect, procedure RoundRect(Xl, Yl, X2, Y2, ХЗ, Y3: Integer); |
Рисует прямоугольник со скругленными углами: (X1, Y1) и (Х2, Y2) прямоугольник, ХЗ и Y3 ширина и высота эллипса скругления. |
StretchDraw, procedure StretchDraw (constRect: TRect; Graphiс: TGraphic ); |
Рисует графическое изображение Graphic в указанную прямоугольную область канвы Rect, подгоняя размер изображения под заданную область. |
TextOut, procedure TextOut(X, Y: Integer; const Text: string); |
Пишет указанную строку текста Text на канве, начиная с указанной позиции. |
TextRect, procedure TextRect(Rect: TRect; X, Y: Integer;const Text: string); |
Пишет указанную строку текста Text на канве, начиная с указанной позиции и усекая текст, выходящий за пределы указанной прямоугольной области Rect. |
Свойства
Список свойств, определенных или переопределенных в TCanvas:
Свойство |
Объявление / Описание |
Brush propertyBrush: TBrush |
Определяет цвет и стиль заполнения замкнутых фигур и фона. |
ClipRect propertvClipRect: TRect; |
Определяет доступную область рисования на канве и область, подлежащую перерисовке при событии OnPaint. Свойство только для чтения. |
CopyMode property CopyMode: TCopyMode; |
Определяет режим копирования графического изображения на канву. |
Font property Font: TFont |
Определяет атрибуты шрифта, которым выводится текст. |
Pen propertyPen: TPen |
Определяет свойства пера, рисующего линии и фигуры. |
PenPos propertyPenPos: TPoint |
Определяет текущую позицию пера. |
Pixels property Pixels[X. Y: Integer]: TColor: |
Определяетцветапикселов. |
События
Событие |
Описание |
OnChange |
Событие после изменения изображения. |
OnChangine |
Событие перед изменением изображения. |
1.1 Объекты: Brush, Pen
Карандашу и кисти, используемым для вывода графики на холсте, соответствуют свойстваРеn(карандаш) иBrush(кисть), которые представляют собой объекты типа треп иTBrush, соответственно. Значения свойств этих объектов определяют вид выводимых графических элементов.
Карандаш используется для вычерчивания точек, линий, контуров геометрических фигур: прямоугольников, окружностей, эллипсов, дуг и др. Вид линии, которую оставляет карандаш на поверхности холста, определяют свойства объекта треп, которые перечислены в таблице:
Свойства объекта треп (карандаш):
Свойство |
Определяет |
Color |
Цвет линии |
Width |
Толщину линии |
Style |
Вид линии |
Mode |
Режим отображения |
СвойствоColorзадает цвет линии, вычерчиваемой карандашом.
Значение свойства Color определяет цвет линии:
Константа |
Цвет |
Константа |
Цвет |
clBlack |
Черный |
clSilver |
Серебристый |
clMaroon |
Каштановый |
clRed |
Красный |
clGreen |
Зеленый |
clLime |
Салатный |
clOlive |
Оливковый |
clBlue |
Синий |
clNavy |
Темно-синий |
clFuchsia |
Ярко-розовый |
clPurple |
Розовый |
clAqua |
Бирюзовый |
clTeal |
Зелено-голубой |
clWhite |
Белый |
clGray |
Серый |
|
|
Свойствоstyleопределяет вид (стиль) линии, которая может быть непрерывной или прерывистой, состоящей из штрихов различной длины. Толщина пунктирной линии не может быть больше 1. Если значение свойстваPen.widthбольше 1, то пунктирная линия будет выведена как сплошная.
Значение свойства Реn.туре определяет вид линии:
Константа |
Вид линии |
psSolid |
Сплошная линия |
psDash |
Пунктирная линия, длинные штрихи |
psDot |
Пунктирная линия, короткие штрихи |
psDashDot |
Пунктирная линия, чередование длинного и короткого штрихов |
psDashDotDot |
Пунктирная линия, чередование одного длинного и двух коротких штрихов |
psClear |
Линия не отображается (используется, если не надо изображать границу области, например, прямоугольника) |
СвойствоModeопределяет, как будет формироваться цвет точек линии в зависимости от цвета точек холста, через которые эта линия прочерчивается. По умолчанию вся линия вычерчивается цветом, определяемым значением свойстваPen.Color.
Кисть (canvas.Brush) используется методами, обеспечивающими вычерчивание замкнутых областей, например геометрических фигур, для заливки (закрашивания) этих областей.
Кисть, как объект, обладает двумя свойствами:
Свойство |
Определяет |
Color |
Цвет закрашивания замкнутой области |
Style |
Стиль (тип) заполнения области |
Область внутри контура может быть закрашена или заштрихована. В первом случае область полностью перекрывает фон, а во втором сквозь незаштрихованные участки области будет виден фон.
В качестве значения свойстваColorможно использовать любую из констант типаTColorКонстанты, позволяющие задать стиль заполнения области, приведены в таблице:
Константа |
Тип заполнения (заливки) области |
bsSolid |
Сплошная заливка |
bsClear |
Область не закрашивается |
bsHorizontal |
Горизонтальная штриховка |
bsVertical |
Вертикальная штриховка |
bsFDiagonal |
Диагональная штриховка с наклоном линий вперед |
bsBDiagonal |
Диагональная штриховка с наклоном линий назад |
bsCross |
Горизонтально-вертикальная штриховка, в клетку |
bsDiagCross |
Диагональная штриховка, в клетку |
Окно программы Стили заполнения областей
1.2 Объект Front
Модуль graphics.
Определяет множество характеристик, описывающих шрифт, используемый при отображении текстов: высоту шрифта, его имя, атрибуты (полужирный, курсив) и т.д.
Свойство |
Объявление / Описание |
Color property Color: TColor; |
Определяетцветтекста. |
Height propertyHeight: Integer; |
Характеризует высоту шрифта в пикселах. |
Name property Name: TFontName; |
Вид (имя) шрифта. |
Size propertySize: Integer; |
Размер шрифта в кеглях (пунктах). |
Style propertyStyle: TFontStyles; |
Стиль шрифта: полужирный, курсив, подчеркнутый, перечеркнутый. |
1.3 Способы рисования прямоугольников
Rectangle
Рисует на канве текущим пером прямоугольник и закрашивает его текущей кистью
КлассTCanvas
Объявление
procedure Rectangle(XI, Yl, Х2, Y2: Integer);
Описание
Метод Rectangleрисует на канве текущим пером Реп прямоугольник,
верхний левый угол которого имеет координаты (XI, Y1), а нижний правый (Х2, Y2). Прямоугольник закрашивается текущей кистью Brush.
Рисование прямоугольника без рамки можно осуществить методом Fill-
Rect. Прямоугольник со скругленными углами рисуется методом RoundRect.
Прямоугольник без внутренней закраски рисуется методом FrameRect.
Пример
Imagel.Canvas.Rectangle(10,10,210,110);
Polygon
Рисует на канве текущим пером замкнутую фигуру (многоугольник) по заданному множеству угловых точек, замыкая первую и последнюю т очки и закрашивая внутреннюю область фигуры текущей кистью
Класс TCanvas
Объявление
procedure Polygon(Points: array of TPoint);
Описание
Метод Polygonрисует на канве замкнутую фигуру (полигон,многоугольник) по множеству угловых точек, заданному массивом Points. Первая из указанных точек соединяется прямой с последней. Этим метод Polygonотличается от метода Polyline, который не замыкает конечные точки. Рисование проводится текущим пером Реп. Внутренняя область фигуры закрашиваетсятекущей кистью Brush.
Метод позволяет рисовать фигуру по точкам, хранящимся в массиве элементов типа TPoint. Если желательно использовать для рисования только
часть точек массива, это можно сделать с помощью функции Slice. Если надонарисовать полигон всего по нескольким точкам, то передавать их в методPolygonудобно с помощью функции Point.
Примеры
1. Оператор
Forml.Canvas.Polygon([Point(10,10),Point(30,10),
Point(130,30),Point(240, 120)]);
рисует на канве формы четырехугольник по точкам, заданным функциями
Point.
2. Оператор
Forml.Canvas.Polygon(PointArray);
рисует на канве формы многоугольник по точкам, хранящимся в массиве
PointArray, который может быть объявлен, например, следующим образом:
varPointArray:array[1..100] of TPoint;
3. Оператор
Form1.Canvas.Polygon(Slice(PointArray, 10));
рисует на канве формы многоугольник по первым 10 точкам, хранящимся в массиве PointArrayиз предыдущего примера.
Polyline
Рисует на канве текущим пером кусочно-линейную кривую по заданному множествуточек
КлассTCanvas
Объявление
procedure Polyline(Points: array of TPoint);
Описание
Метод Polylineрисует на канве кусочно-линейную кривую по множеству точек, заданному массивом Points. Отличие метод Polylineот метода Polygonзаключается в том, что метод Polygonзамыкает конечные точки, а метод Polyline нет. Рисование проводится текущим пером Реп. Метод не изменяет текущей позиции PenPosпера Реп.
Метод позволяет рисовать кусочно-линейный график функции, хранящийся в массиве элементов типа TPoint. Если желательно использовать для рисования только часть точек массива, это можно сделать с помощью функции Slice. Если надо нарисовать кривую всего по нескольким точкам, то передавать их в метод Polylineудобно с помощью функции Point.
Примеры
1. Оператор
Form1.Canvas. Polyline([Point(10,10),Point(30,10),
Point (130, 30),Point(240, 120)]);
рисует кусочно-линейную кривую по четырем точкам, заданным функциями
Point.
2. varPointArray:array[0..100] of TPoint;
procedure TForm1.ButtonlClick(Sender: TObject);
vari,x,y:word;
begin
for i:=0 to 100 do begin
x:=Image1.ClientWidth*i div 100;
y:=trunc((Image1.ClientHeight div 2)*
(1 + sin (4*Pi*x/Image1.ClientWidth) ) ) ;
PointArray[i]:=Point(x,y);
end;
end;
procedure TForml.Button2Click(Sender: TObject);
begin
Imagel.Canvas.PolyLine(PointArray);
end;
procedure TForml.Button3Click(Sender: TObject);
begin
Imagel.Canvas.PolyLine(Slice(PointArray,25));
end;
Первая процедура ButtonlClickзаполняет массив PointArrayточками, описывающими график функции sin(x) на протяжении двух периодов (4π). Вторая процедура Button2Click по точкам из этого массива рисует график на канве компонента Imagel. Третья процедура Button3Click использует для рисования графика первые 25 точек этого массива.
RoundRect
Рисует на канве прямоугольную рамку со скругленными углами
КлассTCanvas
Объявление
procedureRoundRect(XI, Yl, Х2, Y2, ХЗ, Y3: Integer);
Описание
Метод RoundRectрисует на канве прямоугольную рамку со скругленными
углами, используя текущие установки пера Pen и заполняя площадь фигурытекущей кистью Brush. Рамка определяется прямоугольником с координатами углов (XI,Y1) и (X2,Y2). Углы скругляются с помощьюэллипсов с шириной ХЗ и высотой Y3.
Если задать ширину эллипса ХЗ ≥ Х2─XI, то верхняя и нижняя границы
рамки окажутся целиком скругленными (без прямолинейной части). Если
Y3 ≥ Y2 ─ Y1, то же самое произойдет с левой и правой границами рамки. Еслиже оба измерения эллипса не меньше размеров рамки, то будет рисоватьсяпросто эллипс. Но, конечно, для рисования эллипса лучше использовать методEllipse. Если один из размеров эллипса задать нулевым, то будет рисоватьсяпрямоугольная рамка. Но, конечно, для такой рамки лучше использовать метод Rectangle.
Пример
Следующие операторы вызывают изображение, показанное на рис.:
withImagel.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;
Рис. ПримерыпримененияфункцииRoundRect
Глава 2. Программа иллюстрирующая рисования прямоугольников
Создадим простое приложение, иллюстрирующее работу с графикой в Delphi на примере рисования прямоугольников.
Размещаю на форму Компонент TPanel (Panel1) , для того чтобы расположить на необходимые кнопки и поля ввода координат, и отделить их от поля на котором буду рисовать. (Рисунок 2.1)
(Рисунок2.1)
ДалеенаPanel1помещаючетырекомпонентаEdit1, Edit2, Edit3иEdit4, четырекомпонентаLabel1, Label2, Label3, Label4соответственно, атакжетрикнопкиTButton (Button1 - “Наисовать”, Button2 - “Стереть” иButton3 - “Выбратьцвет”) иTColorDialog(ColorDialog1) (диалогдлявыборацвета). А также кидаю на форму компонент TImage (Image1) на котором будем рисовать.(Рисунок 2.2)
(Рисунок 2.2)
Компоненты Edit1, Edit2, Edit3 и Edit4 будут служить полем для ввода координат. В окне ObjectInspector удалим значения свойств Caption, для ввода нужных нам значений. Для компонентов Label1, Label2, Label3, Label4 изменим значения свойств на x1,y1,x2,y2. Кнопки Button1,Button2и Button3переименуем как «Нарисовать объект» , «Стереть» и «Выбратьцвета».(Рисунок 2.3)
Рисунок 2.3
Приступим к записи процедур для нашей программы. Для этого нужно дважды щелкнуть левой кнопкой мыши по Button1 (Нарисовать) и у нас откроется окно Code, для ввода процедур. В нашем случае, в этом окне уже будет заготовка процедуры:
procedure TForm1.Button1Click(Sender: TObject);
varX1,Y1,X2,Y2: integer; {объявление переменных}
begin{телопрограммы}
X1:=StrToInt(Edit1.Text); {преобразование текстовой строки в целое число}
Y1:=StrToInt(Edit2.Text);
X2:=StrToInt(Edit3.Text);
Y2:=StrToInt(Edit4.Text);
Image1.Canvas.Pen.Color:=RectColor;
Image1.Canvas.Brush.Color:=RectColor;
Image1.Canvas.Rectangle(X1,Y1,X2,Y2);
end;
Щелкнем дважды левой кнопкой мыши и по Button2 (Стереть). В окне Code, для процедуры введем следующее:
procedure TForm1.Button2Click(Sender: TObject);
var X1,Y1,X2,Y2: integer;
begin
X1:=-10;
Y1:=-10;
X2:=Image1.Width+10;
Y2:=Image1.Height+10;
Image1.Canvas.Brush.Color:=clBtnFace;
Image1.Canvas.Rectangle(X1,Y1,X2,Y2);
end;
Щелкнем дважды левой кнопкой мыши и по Button3 (Выбрать цвет). В окне Code, для процедуры введем следующее:
procedure TForm1.Button3Click(Sender: TObject);
begin
if ColorDialog1.Execute then
RectColor:=ColorDialog1.Color;
end;
Выполняем программу (F9), задавая различные значения для углов в указанных ячейках (X1,Y1,X2,Y2).
2.1. Результат работы
2.2 Блок-схемы алгоритма
Заключение
В своей работе я продемонстрировала работу программы, иллюстрирующую работу с графикой в Delphi на примере рисования прямоугольников. Показала, как и куда задаются координаты. В связи с этим можно отметить, что работать с графическими элементами в Delphi достаточно просто. Основные конструкции языка четко выделяются в программе, что способствует хорошему восприятию написанного кода. Графический интерфейс Delphi отлично продуман, среда разработки предоставляет доступ только к тем участкам кода, с которыми необходимо работать, скрывая основную часть программы, которая создается автоматически самой разработкой.
В результате выполнения данной курсовой работы, я убедилася в широких возможностях Delphi 7.
Литература
Приложение
П.1. Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
ColorDialog1: TColorDialog;
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
RectColor:TColor;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var X1,Y1,X2,Y2: integer;
begin
X1:=StrToInt(Edit1.Text);
Y1:=StrToInt(Edit2.Text);
X2:=StrToInt(Edit3.Text);
Y2:=StrToInt(Edit4.Text);
Image1.Canvas.Pen.Color:=RectColor;
Image1.Canvas.Brush.Color:=RectColor;
Image1.Canvas.Rectangle(X1,Y1,X2,Y2);
end;
procedure TForm1.Button2Click(Sender: TObject);
var X1,Y1,X2,Y2: integer;
begin
X1:=-10;
Y1:=-10;
X2:=Image1.Width+10;
Y2:=Image1.Height+10;
Image1.Canvas.Brush.Color:=clBtnFace;
Image1.Canvas.Rectangle(X1,Y1,X2,Y2);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if ColorDialog1.Execute then
RectColor:=ColorDialog1.Color;
end;
end.
PAGE \* MERGEFORMAT1