Delphi canvas нарисовать треугольник

Урок 27. Рисуем на форме

Изучим основные приемы рисования. Рисование на форме (как, впрочем, и на многих других объектах) происходит через контекст устройства (холст). Этот объект появляется в виде подсказки после точки при наборе программы.

К этому объекту ( Canvas ) мы можем приписывать разные другие объекты, в частности кисть ( TBrush ), перо ( TPen ) и шрифт ( TFont ). Кроме того, на холсте ( Canvas ) мы можем использовать картинку ( TBitmap ). Эти объекты будут рассмотрены подробнее в следующих уроках.

Так как при рисовании нам постоянно придется использовать конструкции вида Form1.Canvas , то лучше эту часть вынести за скобки с помощью with .

with Form1.Canvas do

Между begin и end мы как раз и будем рисовать. Куда поместить весь этот код, зависит от задачи. Можно написать его в обработчике нажатия какой-нибудь кнопки или еще где-нибудь, где вам надо. Мы же поместим его в обработчик FormPaint для нашей формы. Логично это сделать потому, что, в частности, это событие возникает и при создании формы. Кроме того, если окно нашей формы будет закрыто другим окном, а потом снова окажется видимым, то код FormPaint также будет выполняться, так что мы остановимся именно на этом обработчике.

Давайте для начала нарисуем кружок желтого цвета:

procedure TForm1.FormPaint(Sender: TObject);

with Form1.Canvas do

//Задаем кисть желтого цвета

Brush.Color:=RGB(255, 255, 0);

Ellipse(10, 10, 30, 30);

Аналогичным образом можно нарисовать прямоугольник (используем Square ), напечатать некой текст ( TextOut ) или вывести еще какие-нибудь примитивы.

Для рисования линий используются методы LineTo и MoveTo . Первый из них рисует отрезок, второй — просто передвигает точку рисования.

Вот пример их использования:

//Передвигаем перо в точку (10, 10)

//Рисуем три линии

Тот же результат можно получить и через метод Polygon .

Он в качестве параметра берет массив точек (вершин):

points: Array [1..3] of TPoint;

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

//Берем кисть красного цвета

Form1.Canvas.Brush.Color:=RGB(255, 0, 0);

Form1.Canvas.FloodFill(12, 12, RGB(0, 0, 0), fsBorder);

Если последний параметр равен fsBorder , то заполнение цветом идет до тех пор, пока наша волна закраски не упрется в границу, заданную вторым параметром. Если же он равен fsSurface , то закрашиваться будут именно точки с цветом, задаваемым вторым параметром (начиная от точки, определяемой первыми двумя параметрами).

Кроме линий, можно выводить и отдельные точки.

//Выводим точку красного цвета

Form1.Canvas.Pixels[9, 9]:=RGB(255, 0, 0);

Вообще говоря, рисовать можно не только на форме. Но об этом как-нибудь в следующий раз.

Видео:how to use canvas, delphiСкачать

how to use canvas, delphi

DelphiComponent.ru — бесплатно видеоуроки по Delphi, статьи, исходники

Delphi canvas нарисовать треугольник

Графические возможности Delphi: Дуга, прямоугольник, сектор, точка

Дуга

Вычерчивание дуги выполняет метод Arc, инструкция вызова которого вобщем виде выглядит следующим образом:

  • xl, yl, х2, у2 — параметры, определяющие эллипс (окружность), частью которого является вычерчиваемая дуга;
  • хЗ, уз — параметры, определяющие начальную точку дуги;
  • х4, у4 — параметры, определяющие конечную точку дуги.

Начальная (конечная) точка — это точка пересечения границы эллипса и прямой, проведенной из центра эллипса в точку с координатами хЗ и уз (х4, у4). Дуга вычерчивается против часовой стрелки от начальной точки к конечной <рис. 10.7).

Цвет, толщина и стиль линии, которой вычерчивается дуга, определяются значениями свойства Реп поверхности (canvas), на которую выполняется вывод.

Рис. 1О.7. Значения параметров метода Arc определяют дугу как часть эллипса (окружности)

Delphi canvas нарисовать треугольник

Прямоугольник

  • Объект — имя объекта (компонента), на поверхности которого выполняется вычерчивание;
  • x1, y1 и y2, у2 — координаты левого верхнего и правого нижнего углов прямоугольника.

Метод RoundRec тоже вычерчивает прямоугольник, но со скругленными углами. Инструкция вызова метода RoundRec выглядит так:

  • x1, y1, х2, у2 — параметры, определяющие положение углов прямоугольника, в который вписывается прямоугольник со скругленными углами;
  • хЗ и уЗ — размер эллипса, одна четверть которого используется для вычерчивания скругленного угла (рис. 10.8).

Рис. 10.8. Метод RoundRec вычерчивает прямоугольник со скругленными углами

Delphi canvas нарисовать треугольник

Вид линии контура (цвет, ширина и стиль) определяется значениями свойства реп, а цвет и стиль заливки области внутри прямоугольника — значениями свойства Brush поверхности (canvas), на которой прямоугольник вычерчивается.

Есть еще два метода, которые вычерчивают прямоугольник, используя в качестве инструмента только кисть (Brush). Метод FiliRect вычерчивает закрашенный прямоугольник, а метод FrameRect — только контур. У каждого из этих методов лишь один параметр — структура типа TRect. Поля структуры TRect содержат координаты прямоугольной области, они могут быть заполнены при помощи функции Rect.

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

Многоугольник

Метод polygon вычерчивает многоугольник. В качестве параметра методполучает массив типа TPoint. Каждый элемент массива представляет собой запись, поля (х,у) которой содержат координаты одной вершины многоугольника. Метод Polygon вычерчивает многоугольник, последовательносоединяя прямыми линиями точки, координаты которых находятся в массиве; первую со второй, вторую с третьей, третью с четвертой и т. д. Затемсоединяются последняя и первая точки.

Цвет и стиль границы многоугольника определяются значениями свойстваРеп, а цвет и стиль заливки области, ограниченной линией границы, — значениями свойства Brush, причем область закрашивается с использованиемтекущего цвета и стиля кисти.

Ниже приведена процедура, которая, используя метод polygon, вычерчиваеттреугольник:

Сектор

Метод Pie вычерчивает сектор эллипса или круга. Инструкция вызова метода в общем виде выглядит следующим образом:

  • x1, y1, х2, у2 — параметры, определяющие эллипс (окружность), частью которого является сектор;
  • хЗ, уЗ, х4, у4 — параметры, определяющие координаты конечных точек прямых, являющихся границами сектора.

Начальные точки прямых совпадают с центром эллипса (окружности). Сектор вырезается против часовой стрелки от прямой, заданной точкой с координатами (хЗ, уз), к прямой, заданной точкой с координатами (х4, у4) (рис. 10.9).

Рис. 1О.9. Значения параметров метода Pie определяют сектор как часть эллипса (окружности)

Delphi canvas нарисовать треугольник

Точка

Поверхности, на которую программа может осуществлять вывод графики,соответствует объект canvas. Свойство Pixels, представляющее собой двумерный массив типа TColor, содержит информацию о цвете каждой точки графической поверхности. Используя свойство Pixels, можно задать требуемый цвет для любой точки графической поверхности, т. е. «нарисовать» точку.

Например, инструкция:

окрашивает точку поверхности формы в красный цвет.

Размерность массива Pixels определяется размером графической поверхности. Размер графической поверхности формы (рабочей области, которую также называют клиентской) задается значениями свойств clientwidth и clientHeight, а размер графической поверхности компонента image — значениями свойств width и Height. Левой верхней точке рабочей области формы соответствует элемент pixels [о, о], а правой нижней —Pixels[Clientwidth — 1,ClientHeight — 1].

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

Например, если некоторая функция f(x) может принимать значения от нуля до 1000, и для вывода ее графика используется область формы высотой в 250 пикселов, то масштаб оси у вычисляется по формуле: т = 250/1000. Таким образом, значению/(х) = 70 будет соответствовать точка с координатой Y= 233. Значение координаты вычислено по формуле

Y=h-f(x)x m = 250 — 70х(250/1000),

где h — высота области построения графика.

Обратите внимание на то, что точное значение выражения

250 — 70х(250/1000) равно 232,5.

Но т. к. индексом свойства Pixels, которое используется для вывода точки на поверхность canvas, может быть только целое значение, то число 232,5 округляется к ближайшему целому, которым является число 233.

Следующая программа, текст которой приведен в листинге 10.5, используя свойство Pixels, выводит график функции у = 2 sm(x) e^5. Для построения графика используется вся доступная область формы, причем если во время работы программы пользователь изменит размер окна, то график будет выведен заново с учетом реальных размеров окна.

Видео:Нахождение площади треугольника в DelphiСкачать

Нахождение площади треугольника в Delphi

Урок 2 — Простые примитивы

В прошлом уроке мы рассмотрели инициализацию OpenGL. Этот урок будет посвящён рисованию и раскрашиванию простых примитивов: точка, линия, треугольник и квадрат. В нашем прошлом примере изменим формат пиксела.

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

В процедуре создания Формы напишите: Далее в обработчике события Form1 OnResize создадим процедуру перерисовки нашего окна. Функция glFrustum имеет 6 параметров, первые 4 из них, это границы отсечения: верхняя, правая, нижняя, левая. Последние 2 параметра – это передняя и задняя граница отсечения.

Функция gluLookAt имеет 9 параметров, первые 3 из них — позиция наблюдателя (x, y, z), следующие 3 параметра – точка наблюдения (x, y, z) и последние 3 параметра – вектор верха.

InvalidateRect ( Handle,nil,False ); перерисовывает форму гораздо быстрее, чем Form1.Repaint.

Для того, чтобы наше окно обновлялось надо вызвать процедуру FormResize до отрисовки примитивов. Всё, с приготовлением мы закончили, Теперь давайте приступим к рисованию примитивов и начнём мы с точки. Все фигуры рисуются в логических скобках glBegin(param); и glEnd; где param – тип рисуемого примитива.

glBegin() может иметь один из следующих параметров:

  • GL_PONTS — точка
  • GL_LINES — линия
  • GL_TRIANGLES — треугольник
  • GL_QUADS — квадрат
  • GL_POLYGON – многоугольник

Каждая вершина задаётся функцией glVertex3f(x, y ,z) и может иметь вид: glVertex3fv(@массив) , glVertex3i(x, y ,z) с параметрами типа integer.

Теперь нарисуем точку, в процедуре FormPaint после очистки буфера цвета запишем следующий код: Delphi canvas нарисовать треугольник
Вот мы и получили очень большую точку в 20 пикселов :). Теперь давайте изменим цвет точки функцией glColor3f(R,G,B);
Эту функцию следует вызывать перед заданием позиции каждой вершины.

Раскрасим в красный цвет: Delphi canvas нарисовать треугольник
Точку мы нарисовали. Теперь нарисуем линию. Делается это точно так же как и точку. Т.к. линия состоит из 2 вершин то функцию glVertex3f(x, y ,z) будем вызывать 2 раза: Допишем этот код и получим:

Delphi canvas нарисовать треугольник
OpenGL сам делает плавное перетекание цвета между вершинами. Поучается довольно красиво.

Не хватает квадрата и треугольника. Давайте нарисуем! Delphi canvas нарисовать треугольник
Вроде бы получилось.

В примере данного урока я сделал небольшое дополнение: при нажатии стрелки вправо вся система координат поворачивается вправо функцией glRotatef(угол, x, y, z) где x, y, z – координаты оси поворота, а при нажатии на стрелку влево, то вся система координат поворачивается влево.

Можете поэкспериментировать и нарисовать что-нибудь другое.

В следующем уроке мы будем работать с освещением и нарисуем объёмные геометрические фигуры с падающим на них светом.

🎬 Видео

Рисуем треугольник с помощью линий LineTo MoveTo и координат мыши Form canvas Pen Color WidthСкачать

Рисуем треугольник с помощью линий LineTo MoveTo и координат мыши Form canvas Pen Color Width

КАК НАРИСОВАТЬ ТРЕУГОЛЬНИК В ПРОГРАММЕ ADOBE ILLUSTRATOR.Скачать

КАК НАРИСОВАТЬ ТРЕУГОЛЬНИК В ПРОГРАММЕ ADOBE ILLUSTRATOR.

Delphi - работа с графикой (canvas)Скачать

Delphi - работа с графикой (canvas)

Draw shapes with DelphiСкачать

Draw shapes with Delphi

Как рисовать фигуры и картинки через код в Delphi (Без Image) | [Коротко о Canvas]Скачать

Как рисовать фигуры и картинки через код в Delphi (Без Image) | [Коротко о Canvas]

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

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

Canvas Графика / Основы / Draw / Рисование примитивов и изображений BMP / Delphi, Pascal, lazarusСкачать

Canvas Графика / Основы / Draw / Рисование примитивов и изображений BMP / Delphi, Pascal, lazarus

урок на делфи 13. Рисуем флаг на canvasСкачать

урок на делфи 13. Рисуем флаг на canvas

Функции динамических массивов в надстройке PLEXСкачать

Функции динамических массивов в надстройке PLEX

Программирование на Delphi. Видеоурок № 1. Учимся рисовать на Canvas. (Артём Кашеваров)Скачать

Программирование на Delphi. Видеоурок № 1. Учимся рисовать на Canvas. (Артём Кашеваров)

урок на делфи 25. paint для рисованияСкачать

урок на делфи 25. paint для рисования

как нарисовать полуобрезанный круг делфи программирование моудль canvas delphiСкачать

как нарисовать полуобрезанный круг делфи программирование моудль canvas delphi

Без этих теорем ты не затащишь геометрию на ЕГЭ. Задача 17 счетная планиметрияСкачать

Без этих теорем ты не затащишь геометрию на ЕГЭ. Задача 17 счетная планиметрия

Как нарисовать треугольник за 3 секундыСкачать

Как нарисовать треугольник за 3 секунды

Нахождение площади треугольника по координатам.mp4Скачать

Нахождение площади треугольника по координатам.mp4

Примитивы OpenGL: точка, треугольник, квадрат, полигон и их видыСкачать

Примитивы OpenGL: точка, треугольник, квадрат, полигон и их виды

Урок на делфи 48 - Рисование поверх другого изображенияСкачать

Урок на делфи 48 - Рисование поверх другого изображения
Поделиться или сохранить к себе: