Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Программа иллюстрирующая работу с графикой в Delphi на примере рисования прямоугольников

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 25.11.2024

Содержание

Введение

Глава 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.

  Если задать ширину эллипса ХЗ ≥ Х2XI, то верхняя и нижняя границы

рамки окажутся целиком скругленными (без прямолинейной части). Если

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.  Архангельский А.Я. – Delhi 7. Справочное пособие – М.: OOO«Бином-Пресс», 2003 г. – 1024 с.;
  2.  Пестриков В. М., Маслобоев А. Н. –Delhi на примерах. БХВ-Петербург, 2005. – 496 с.;
  3.  Лекционный курс. Графика. Рисование стандартных фигур.
  4.  И. Ю. Баженова - Delhi 7. Самоучитель программиста – Москва 2003.;

Приложение

П.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




1. Тема5 1Просвещение это идейное и общественное движение в Европе и Северной Америке конца XVII XVIII вв
2. психиатрическая экспертиза; судебнопсихологическая экспертиза; врачебная экспертиза; трудовая
3.  Червячная передача
4. 1Конечность. Должен приводить к решению
5. тематическое получение прибыли от пользования имуществом продажи товаров выполнения работ или оказания ус1
6. маслянные длинноходные амортизаторы
7. Особенности заключения договора социального найма жилого помещения.html
8. Политика органов местного самоуправления в сфере поддержки малого бизнеса
9.  Общие сведения Цепная передача ~ это механизм предназначенный для передачи движения между параллельными
10. Формирование товарного ассортимента
11. медицинская академия имени С
12. Статья- Геоэкологический мониторинг- исследование контролируемых параметров особо охраняемых территорий
13. Война народ победа взгляд сквозь годы
14. Билеты по английскому языку за 11-класс (Украина)
15. Сама природа монеты такова что множество одинаковых экземпляров выбитых из долговечного стойкого материа.html
16. восьмая от Солнца большая планета Солнечной системы относится к планетамгигантам
17. реферат дисертації на здобуття наукового ступеня кандидата історичних наук Луганськ ~
18. Статья- Как сохранить семью
19. Рекомендуется проветрить комнату перед тренировками
20. Характеристика ассортимента автомобильных шин