Основные объекты: поверхность для рисования, карандаш, кисть, текст в графическом режиме.




Графические в Lazarus

 

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

Теория. Lazarus предоставляет программисту возможности для созда­ния приложений, использующих графику, т.е. разрабатывать программы, с помощью кото­рых можно получить графические изображения: схемы, чертежи, текст, иллюстрации. При этом графические изображения выводятся на поверхность объекта (формы или компонента области иллюстрации Image). Поверхности объекта соответствует свойство Canvas. Для того, чтобы вывести на поверхность объекта графический элемент (прямую линию, окруж­ность, прямоугольник и т.д.), необходимо применить к свойству Canvas этого объекта соот­ветствующий метод. Например, инструкция Form1.Convas.Rectangle(10,10,100,100) вычер­чивает в окне вывода изображения прямоугольник. В свою очередь, свойство Canvas - это объект типа TCanvas.

ВDelphy существуют следующие типы для использования графических средств Windows: TСanvas (холст, канва), TFont (шрифт), TPen (карандаш, перо), TBrush (кисть).

Объект Canvas применяется какповерхность рисования для объектов, которые прорисовывают свое собственное изображение. Размер холста можно получить, обратившись к свойствам Height и Width области иллюстрации (Image) или к свойствам формы: ClientHeight и ClientWidth.

Объект Canvas содержит свойства, события и методы, которые используются:

- при создании изображений с помощью специальных объектов:кисть, перо и шрифт;

- при рисовании и заливке различных фигур или линий;

- при выводе текста;

- при выводе графических изображений.

С помощью свойств и методов объекта Canvas можно рисовать на поверхности видимых объектов, которые включают этот тип и, соответственно, имеют свойство Canvas. Это такие объекты, как TBitmap, TComboBox, TDBComboBox, TDBGrid, TDBListBox, TDirectoryListBox, TDrawGrid, TFileListBox, TForm, TImage, TListBox, TOutLine, TPaintBox, TPrinter, TStringGrid.

Canvas, в свою очередь, является обектом, объединяющим в себе поле для рисования, карандаш (Pen), кисть (Brush) и шрифт (Font). Используя свойство Canvas, можно воспроизводить на форме любые графические объекты – картинки, многоугольники, текст и т.п. без применения объектов TImage, Tshape и TLabel ( т.е. без использования дополнительных ресурсов), однако при этом необходимо обрабатывать событие OnPaint того объекта, на канве которого производится рисование.

Рассмотрим подробнее свойства объекта Canvas. Методы, обеспечивающие вычерчивание на поверхности холста графических примитивов, используют карандаш и кисть.. Карандашу и кисти соответствуют свойства, значения которых определяют вид выводимых графических элементов.

Карандаш используется для вычерчивания точек, линий, контуров геометрических фигур: прямоугольников, окружностей, эллипсов, дуг и др. Вид линии, которую оставляет карандаш на поверхности холста, определяют свойства объекта Pen(тип Tpen), которые перечислены в таблице 1.

Таблица 4.1. Свойства объекта Pen.

Свойство Определяет
Color Цвет линии
Width Толщину линии
Style Вид линии
Mode Режим отображения
Handle Объект карандаша в прямых вызовах процедур Windows API

В таблице 2 перечислены именованные константы(тип ТColor), которые можно использовать в качестве значения свойства Color.

 

Таблица 4. 2. Значения свойства Pen.Color

 

Константа Цвет Константа Цвет
СlBlack Черный ClSilver Серебристый
СlMaroon Каштановый ClRed Красный
СlGreen Зеленый ClLime Салатный
СlOlive Оливковый ClBlue Синий
СlNavy Темно-синий ClFuchsia Ярко-розовый
СlPurple Розовый ClAqua Бирюзовый
СlTeal Зелено-голубой ClWhite Белый
СlGray Серый    

 

Cвойство Width задает толщину линии(в пикселах). Например,инструкция Convas.Pen.Width:=2 устанавливает толщину линии в 2 пиксела.

Свойство PenPos (тип TPoint) определяет текущую позицию карандаша. При этом рекомендуется перемещать карандаш с помощью метода MoveTo, а не прямой установкой данного свойства.

Свойство Style определяет вид линии, которая может быть непрерывной или прерывистой. В таблице 3 перечислены именованные константы, позволяющие задать стиль линии.

 

Таблица 4.3. Стиль линии

 

Константа Вид линии
PsSolid Сплошная линия
PsDash Пунктирная линия, длинные штрихи
psDot Пунктирная линия, короткие штрихи
psDashDot Пунктирная линия, чередование длинного и короткого штрихов
psDashDotDot Пунктирная линия, чередование одного длинного и двух коротких штрихов
psClear Линия не отображается

 

Свойство Mode определяет, как будет формироваться цвет точек линии в зависимости от цвет точек холста, через кторые эта линия прочерчивается. По умолчанию вся линия вычерчивается цветом, определяемым значением свойства Pen.Color.

В таблице 4 перечислены некоторые константы, которые можно использовать в качестве значения свойства Pen.Mode.

 

Таблица 4.4. Значения свойства Pen.Mode.

 

Константа Цвет линии
pmBlack Черный, не зависит от значения свойства Pen.Color
pmWhite Белый, не зависит от значения свойства Pen.Color
pmCopy Цвет линии определяется значением свойства Pen.Color
pmNotCopy Цвет линии является инверсным по отношению к значению свойства Pen.Color
pmNot Цвет линии определяется как инверсный по отношению к цвету точки холста, в которую выводится точка линии

 

Кисть (Convas.Brush) используется для заливки замкнутых областей. Кисть, как объект, обладает двумя свойствами, перечисленными в табл.4.5.

Таблица 4.5. Свойства объекта Brush

 

Свойство Определяет
Соlor Цвет закрашивания замкнутой области
Style Стиль (тип) заполнения области

 

В качестве значения свойства Соlor можно использовать любую из констант табл.4.2. свойств Pen.Color.

В таблице 4.6 приведены константы, позволяющие задать стиль заполнения области.

Таблица 4.6. Стиль заполнения области.

 

Константа Тип заполнения (заливки) области
BsSolid Сплошная заливка
BsClear Область не закрашивается
BsHorisontal Горизонтальная штриховка
BsVertical Вертикальная штриховка
BsFDiagonal Диагональная штриховка с наклоном линий вперед
BsBDiagonal Диагональная штриховка с наклоном линий назад
BsCross Горизонтально-вертикальная штриховка, в клетку
BsDiagCross Диагональная штриховка, в клетку

 

 

Свойство Font (тип TFont) объекта Canvas определяет параметры шрифта, которым выводится текст на холсте. Параметры шрифта устанавливаются через его свойства, которые приведены в табл.4.6.

Таблица 4.6. Свойства объекта Font

 

Свойство Назначение
Name Определяет название шрифта (Arial, Times New Roman,...)
Size Pазмер шрифта в пунктах (points). Один пункт равен 1.72 дюйма.
Style Стиль начертания символов (курсив, полужирный, подчеркнутый, перечеркнутый)
Color Цвет символов
  Устанавливает стиль шрифта
Height Размер шрифта в пикселях

 

Следует иметь ввиду, что область вывода текста закрашивается текущим цветом кисти. Поэтому перед выводом текста свойству Brush.Color нужно присвоить значение bsClear или задать цвет кисти, совпадающий с цветом поверхности, на которую выводится текст.

Для вывода текста на поверхность графического объекта используется метод TextOut. Инструкция вызова метода TextOut в общем виде выглядит следующим образом:

Объект.Convas.Textut(x, y, Текст),

где

Объект – имя объекта, на поверхность которого выводится текст;

x, y – координаты точкиграфической поверхности, от которой выполняется вывод текста;

Текст - переменная или константа символьного типа, значение которой определяет выводимый текст.

Далее рассмотрим некоторые методы объекта Convas.

Метод LineTo (X, Y:Integer) рисует линию от указателя до точки с координатами ( X, Y).

Метод MoveTo (X, Y:Integer) применяется для перемещения текущего указателя в новую позицию с координатами (X, Y).

Метод Ellipse (X1, Y1, X2, Y2: Integer) дает возможность нарисовать заполненный эллипс.

Метод Rectangle (X1, Y1, X2, Y2: Integer) обеспечивает вывод заполненного прямоугольника.

Метод Polygon (const Points: array of Tpoint) служит для рисования заполненного многоугольника.

Метод Draw (X, Y: Integer; Graphic: TGraphic) помещает изображение, заданное параметром Graphic, на поверхность рисования. Рисунок помещается в прямоугольную область, определяемую размером данного изображенияю При этом его верхний угол устанавливается в точку с координатами (Text).

Метод TextOut (X, Y: Integer; const Text: String) предназначен для отображения текста на поверхности рисования. Данный метод выводит строку текста, задаваемую параметром Text, в область вывода, верхний левый угол которой определяется параметрами Text.

Метод TextRect (Rect: TRect; X, Y:integer; const Text: String) служит для отображения текста также, как и предыдущий метод, однако область вывода текста ограничивается, что определяется параметром Rect.

Метод TextHeight (const Text: String) возвращает в качестве результата высоту прямоугольной области, занимаемой строкой Text.

Метод TextWidth (const Text: String) возвращает значение, определяющее ширину области, занимаемой строкой Text.

Метод CopyRect(Dest: TRect; Convas: Tconvas; Source: TRect) позволяет скопировать прямоугольную областьс размерами, определяемыми параметром Source, с исходного холста, заданного параметром Convas, в прямоугольную область Dest поверхности рисования. При этом копируемое изображение масштабируется в соответствии с размерами области Dest.

Далее следует упомянуть о событиях OnChanging и OnChange. Эти собыия возникают в случае изменения содержимого поверхности рисования, то есть при использовании любых методов, связанных с рисованием или выводом текста на поверхность рисования. Событие OnChanging возникает перед модификацией холста, а событие OnChange - после модификации. Обработчики этих событий программируются вручную, так как объект Canvas не доступен на этапе проектирования.

 


Рисуем график функции в Delphi

В этой статье мы рассмотрим несколько способов нарисовать график какой-нибудь функции. Рисовать график мы будем на канве компонента Image.

Рисование по пикселам

Рисовать на канве можно разными способами. Первый вариант - рисовать по пикселям. Для этого используется свойство канвы Pixels. Это свойство представляет собой двумерный массив, который отвечает за цвета канвы. Например Canvas.Pixels[10,20] - соответствует цвету пикселя с координатами (10,20). С массивом пикселей можно обращаться, как с любым свойством: изменять цвет, задавая пикселю новое значение, или определять его цвет, по хранящемуся в нем значению. На примере ниже мы зададим черный цвет пикселю с координатами (10,20):

Canvas.Pixels[10,20]:=clBlack;

Теперь мы попробуем нарисовать график функции F(x), если известен диапазон ее изменений Ymax и Ymin, и диапазон изменения аргумента Xmax и Xmin. Для этого мы напишем пользовательскую функцию, которая будет вычислять значение функции F в точке x, а также будет возвращать максимум и минимум функции и ее аргумента.

function Tform1.F(x:real; var Xmax,Xmin,Ymax,Ymin:real):real;
Begin
F:=Sin(x);
Xmax:=4*pi;
Xmin:=0;
Ymax:=1;
Ymin:=-1;
End;

Не забудьте также указать заголовок этой функциии в разделе Public:

public
{ Public declarations }
function F(x:real; var Xmax,Xmin,Ymax,Ymin:real):real;

Здесь для ясности мы просто указали диапазон изменения функции Sin(x) и ее аргумента, ниже эта функция будет описана целиком. Параметры Xmax, Xmin, Ymax, Ymin - описаны со словом Var потому что они являются входными-выходными, т.е. через них функция будет возвращать значения вычислений этих данных в основную программу. Поэтому надо объявить Xmax, Xmin, Ymax, Ymin как глобальные переменные в разделе Implementation:

implementation
var Xmax,Xmin,Ymax,Ymin:real;

Теперь поставим на форму кнопку и в ее обработчике события OnClick напишем следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var x,y:real;
PX,PY:longInt;
begin
for PX:=0 to Image1.Width do
begin
x:=Xmin+PX*(Xmax-Xmin)/Image1.Width;
y:=F(x,Xmax,Xmin,Ymax,Ymin);
PY:=trunc(Image1.Height-(y-Ymin)*Image1.height/(Ymax-Ymin));
image1.Canvas.Pixels[PX,PY]:=clBlack;
end;
end;

В этом коде вводятся переменные x и y, являющиеся значениями аргумента и функции, а также переменные PX и PY, являющиеся координатами пикселей, соответствующих x и y. Сама процедура состоит из цикла по всем значениям горизонтальной координаты пикселей PX компонента Image1. Сначала выбранное значение PX пересчитывается в соответствующее значение x. Затем производится вызов функции F(x) и определяется ее значение Y. Это значение пересчитывается в вертикальную координату пикселя PY



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-05-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: