Графика в lazarus примеры программ

  • Настройки шрифта для вывода строк на канву
    with Image1.canvas.font do
    begin
    color:= clNavy; // Цвет символов
    style:= []; //Начертание символов
    name:= ‘Arial Cyr’; //Имя шрифта
    size:= 14; //Размер шрифта
    end;
    В приведённом выше фрагменте процедуры настройки шрифта — стиль (Style) это массив стилей, поэтому стили можно складывать. Массив имеет следующие значения:
    [] — пустое значение — нормальный шрифт;
    [fsBold] — жирный шрифт;
    [fsItalic] — шрифт Италик (наклонный);
    [fsStrikeOut] — Перечеркнутый шрифт;
    [fsUnderLine] — Подчеркнутый шрифт;
    Имена шрифтов (name) — все имена, содержащиеся в операционной системе, например Times New Roman, Ms Sans Serif, Courier New, .
    Размер шрифта (Size) — может принимать значения от 1 до 32768.
    Для вывода строки текста, с настроенным предварительно шрифтом, на канву следует воспользоваться процедурой TextOut(x,y,’Строка текста’);. Не следует забывать, что эта процедура должна относиться к определенному холсту (в программе холстов может быть много), поэтому следует четко указывать объект на котором мы хотим разместить надпись, например так: Image25.canvas.textout(10,20,’Строка’);. Координаты x и y определяют начало первого символа надписи на холсте (в пикселях).
  • Следующим шагом при рисовании является настройка пера (карандаша) для рисования — свойство Pen:
    with Image1.canvas.pen do
    begin
    width:= 2; // Толщина карандаша в пикселях
    color:= clBlack; // Цвет карандаша
    end;
    Сам холст тоже может иметь цвет, который задается свойством canvas.brush.color:= clWhite;
    Произведя все настройки, можно начинать рисование.
    Для рисования на холсте имеются следующие процедуры:
    with image1.canvas do
    begin
    MoveTo(10,10); // Перемещает перо в точку с координатами 10,10
    LineTo(100,100); //Рисуем линию из точки 10,10 к точке 100,100
    Rectangle(10,10,100,100); // Рисуем прямоугольник с координатами верхнего левого угла 10,10 и координатами нижнего правого угла 100, 100
    Ellipse(10,10,100,100); // Рисуем эллипс вписанный в виртуальный прямоугольник с начальной координатой 10,10 и конечной координатой 100,100
    end;
    На самом деле процедур для рисования намного больше, нежели чем перечислено выше, причем с каждой новой версией Delphi их количество увеличивается, поэтому для рисования следует воспользоваться справочником графических процедур и функций для конкретной версии Delphi или Lazarus.
    Еще одно свойство, которое часто используется для рисования, это свойство Pixels. Pixels — это массив всех точек в области холста. Пиксели можно как записывать на холст с определенным цветом: Image1.Canvas.Pixels[x,y]:= clRed;, так и считывать с холста цвет пикселя: variable:= Image1.canvas.pixels[x,y];. В приведенном выше свойстве Pixels — координатами пикселя являются X и Y, variable — переменная, которая должна иметь тип LongInt.

Уроки программирования в Lazarus. Урок №31. Примеры на OpenGL

Графика в Lazarus

Создание приложения «Построитель графиков»
Создайте новый проект. Разместите на окне компонент панель и присвойте панели свойство Align = alBottom. Панель будет расположена внизу окна. Установите в окне компонент Image и присвойте свойству Align значение alClient. Форме присвойте свойству BorderStyle значение bsSingle, а свойству caption значение «Построитель графиков функций».
Установите на панель строчный редактор Edit1 — в него мы будем вводить имя функции. Затем установите на панель редакторы Edit2 и Edit3 в которые мы будем вводить начальное и конечное значение угла функции соответственно.
Еще нам понадобятся 2-е кнопки (Button1, Button2). Первая будет очищать лист, подготавливая его для вывода графика, а вторая будет выводить на лист непосредственно график по заданным параметрам введенным в редакторы. Кнопке Button1 присвойте заголовок «Строить», а кнопке Button2 — заголовок «Очистить». У вас должно получиться приложение показанное на рисунке:

Сначала следует создать событие onCreate для формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
// Очищаем редакторы и присваиваем значения по умолчанию
edit1.text:= ‘SIN’;
edit2.text:= ‘1’;
edit3.text:= ‘600’;
end;
Затем, нам следует создать событие onClick на нажатие кнопки «Очистить»:
procedure TForm1.Button2Click(Sender: TObject);
var r: TRect; // обьявляем переменную типа прямоугольник
begin
// Присваиваем переменной r размер нашего листа Image1
r:= rect(0, 0, image1.width, image1.height);
with Image1.canvas do
begin
brush.style:= bsSolid; // Присваиваем кисти тип заливки — «полная»
brush.color:= clWhite; //делаем цвет холста белым
fillrect(r); //заливаем холст заказанным цветом
pen.color:= clRed; //задаем цвет карандаша: красный
// Рисуем рамку по периметру листа
rectangle(2, 2, image1.width-2, image1.height-2);
// Рисуем ось Х для будущего графика посредине листа
moveto(2,image1.Height div 2);
lineto(image1.width-2, Image1.Height div 2);
end; end;

Читайте также:
Программа для сжатия фильмов на планшет

И наконец, нам осталось создать событие на построение графика вычисления синуса или косинуса — нажатие кнопки Button1- «Строить»:
procedure TForm1.Button1Click(Sender: TObject);
var
alpha1, alpha2: Integer; // переменные для начального и конечного значения угла
z: integer; // переменная для организации цикла
q: integer; // внутренний счетчик
fun: integer; // Значение функции в цикле
begin
alpha1:= StrToInt(edit2.text); //Считываем начальное значение угла
alpha2:= StrToInt(Edit3.Text); // Конечное значение угла
q:= 2;
for z:= alpha1 to alpha2 do // Создаем цикл от начального до конечного значения угла
begin
if UpperCase(Edit1.text) = ‘SIN’ then
fun:= round(sin(z*3.14/180)*60);
if UpperCase(Edit1.text) = ‘COS’ then
fun:= round(cos(z*3.14/180)*80);
image1.canvas.pixels[q,fun+ image1.Height div 2]:= clBlack;
inc(q);
end;
end;
Рассмотрим подробнее действия происходящие в цикле:
Строка: if UpperCase(Edit1.text) = ‘SIN’ then fun := round(sin(z*3.14/180)*60);
означает, что если строка преобразованная к символам верхнего регистра из редактора ввода функции (Edit1) равна значению ‘SIN’, то следует вычислять синус для всех значений z и присваивать переменной fun. Так как эта переменная целого типа, то значение функции следует округлять до целого значения функцией round. Так как аргумент функции должен быть в радианах, а мы вводим угол в градусах, то следует преобразовать градусы в радианы — (z*3.14/180). Далее мы помножаем значение синуса на 60. 60 это масштабный коэффициент амплитуды функции, чем он больше, тем больше амплитуда кривой по оси Y.
Аналогичным образом устроена строка:
if UpperCase(Edit1.text) = ‘COS’ then fun:= round(cos(z*3.14/180)*80); только здесь производится вычисление косинуса и масштабный коэффициент равен 80.
Строка — image1.canvas.pixels[q, fun+ image1.Height div 2]:= clBlack; означает следующее: последовательно, точка за точкой выводим на экран график выбранной функции. С каждым тактом цикла смещаем точку по оси Х на расстояние q, а по оси Y смещаем на значение функции (fun) и плюс ? высоты листа, для того чтобы график проходил положительными значениями над осью Х, а отрицательными значениями под осью Х. Последняя строка цикла inc(q) — увеличение значения q на 1 с каждым тактом цикла. Запустите полученную программу на исполнение, нажмите кнопку «Очистить», а затем кнопку «Строить» — вы получите график синуса со значениями по умолчанию. Затем введите другое значение например COS и нажмите кнопку «Строить», у вас должно получиться примерно то, что изображено на рисунке.

Источник: hi-intel.ru

Графические примитивы класса TCanvas в Lazarus

Класс TCanvas — сердцевина графической подсистемы Delphi (Lazarus). Он объединяет в себе и «холст» (контекст конкретного устройства GDI), и «рабочие инструменты» (перо, кисть, шрифт) и даже «подмастерьев» (набор функций по рисованию типовых геометрических фигур).

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

Для рисования канва включает в себя шрифт, перо и кисть:

(рb) property Font: TFont ; (Pt) property Pen: TPen; (Рb) property Brush: TBrush;

Кроме того, можно рисовать и поточечно, получив доступ к каждому пикселу. Значение свойства

property Pixels [ X , Y : Integer ] : TColor;

соответствует цвету точки с координатами (X,Y).

Читайте также:
Лучшие программы на дискавери

Класс TCanvas

procedure Arc ( X1 , Y1 , X2 , Y2 , XЗ , Y3 , X4 , Y4 : Integer ) ; Метод рисует сегмент эллипса. Эллипс определяется описывающим прямоугольником (X1,Y1) — (X2,Y2). Начальная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (X3,Y3). Конечная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (X4,Y4). Сегмент рисуется против часовой стрелки.
procedure Chord ( X1 , Y1 , X2 , Y2 , XЗ , Y3 , X4 , Y4 : Integer ) ; Рисует хорду и заливает отсекаемую ею часть эллипса. Эллипс, начальная и конечная точки определяются, как в методе Arc.
procedure Ellipse ( X1 , Y1 , X2 , Y2 : Integer ) ; Рисует и закрашивает эллипс, вписанный в прямоугольник (X1,Y1) — (X2,Y2).
procedure MoveTo ( X , Y : Integer ) ; Перемещает текущее положение пера (свойство PenPos) в точку (X,Y).
procedure LineTo ( X , Y : Integer ) ; Проводит линию текущим пером из текущей точки в (X,Y).
procedure BrushCopy ( const Dest : TRect; Bitmap : TBitmap; const Source : TRect; Color : TColor ) ; Производит специальное копирование. Прямоугольник Source из битовой карты Bitmap копируется в прямоугольник Dest на канве; при этом цвет Color заменяется на цвет текущей кисти (Brush.Color).
procedure CopyRect ( const Dest : TRect; Canvas : TCanvas; const Source : TRect ) ; Производит копирование прямоугольника Source из канвы Canvas в прямоугольник Dest в области самого объекта.
procedure FillRect ( const Rect : TRect ) ; Производит заливку прямоугольника (текущей кистью).
procedure Draw ( X , Y : Integer ; Graphic : TGraphic ) ; Осуществляет рисование графического объекта Graphic
procedure StretchDraw ( const Rect : TRect; Graphic : TGraphic ) ; Осуществляет рисование объекта Graphic в заданном прямоугольнике Rect. Если размеры их не совпадают, Graphic масштабируется.
procedure FloodFill ( X , Y : Integer ; Color : TColor; FillStyle : TFillStyle ) ; TFillStyle = ( fsSurface , fsBorder ) ; Производит заливку области текущей кистью. Процесс начинается с точки (X,Y). Если режим FillStyle равен fsSurface, то он продолжается до тех пор, пока есть соседние точки с цветом Color. В режиме fsBorder закрашивание, наоборот, прекращается при выходе на границу с цветом Color.
procedure Pie ( X1 , Y1 , X2 , Y2 , XЗ , Y3 , X4 , Y4 : Integer ) ; Рисует сектор эллипса, описываемого прямоугольником (X1,Y1) — (X2,Y2). Стороны сектора лежат на лучах, проходящих из центра эллипса через точки (X3.Y3) и (X4,Y4).
procedure Polygon ( const Points : array of TPoint ) ; Строит многоугольник, используя массив координат точек Points. При этом последняя точка соединяется с первой и внутренняя область закрашивается.
Polygon ([Point(10,10), Point(30,30),Point(20,40)])
procedure Polyline ( const Points : array of TPoint ) ; Строит ломаную линию, используя массив координат точек Points.
procedure Rectangle ( X1 , Y1 , X2 , Y2 : Integer ) ; Рисует прямоугольник с диагональю заданной координатами (X1,Y1) и (X2,Y2).
procedure RoundRect ( X1 , Yl , X2 , Y2 , ХW , YH : Integer ) ; Рисует прямоугольник с закругленными углами. Координаты вершин — те же, что и в методе Rectangle. Закругления рисуются как сегменты эллипса с размерами осей по горизонтали и вертикали ХW и YH.
function TextHeight ( const Text : string ) : Integer ; Возвращает высоту строки Text в пикселах.
function TextWidth ( const Text : string ) : Integer ; Возвращает ширину строки Text в пикселах.
procedure TextOut ( X , Y : Integer ; const Text : string ) ; Производит вывод строки Text. Левый верхний угол помещается в точку канвы (X,Y).
procedure TextRect ( Rect : TRect; X , Y : Integer ; const Text : string ) ; Производит вывод текста с отсечением. Как и в TextOut, строка Text выводится с позиции (X,Y); при этом часть текста, лежащая вне пределов прямоугольника Rect, отсекается и не будет видна.
property PenPos : TPoint; Содержит текущую позицию пера канвы (изменяется посредством метода MoveTo).

procedure TForm1.Button1Click(Sender: TObject); begin with Paintbox1.Canvas do begin Brush.

Color := clGray; Rectangle(10,100,250,300); // корпус Polygon([Point(0,100),Point(130,20),Point(260,100)]); // крыша Brush.Color := clWhite; Ellipse(110,40,150,80); // чердак Rectangle(30,150,110,230); // окно MoveTo(70,150); LineTo(70,230); Rectangle(150,300,230,150); // дверь Brush.Color := clGray; Polygon([Point(150,300),Point(150,150),Point(210,160),Point(210,300)]); end; end;

Источник: grafika.me

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

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

Читайте также:
Алгоритм работы программы базы данных
Объект Свойство Метод

Свойство canvas — это объект

типа TCanvas. Методы этого типа обеспечивают вывод графических примитивов (точек, линий, окружностей, прямоугольников и т. д.), Свойства задают характеристики выводимых графических примитивов: цвет, толщину и стиль линий; цвет и вид заполнения областей; характеристики шрифта при выводе текстовой информации.

Холст состоит из отдельных точек — пикселов. Положение пиксела характеризуется его координатами (X,Y). Левый верхний пиксел имеет координаты (0, 0). Координаты возрастают сверху вниз и слева направо. Значения координат правой нижней точки холста зависят от размера холста.

Размер холста можно получить, обратившись к свойствам Height и width области иллюстрации (image) или к свойствам формы: ClientHeight и Clientwidth.

Карандаш и кисть

Художник в своей работе использует карандаши и кисти. Методы, обеспечивающие вычерчивание на поверхности холста графических примитивов, тоже используют карандаш и кисть. Карандаш применяется для вычерчивания линий и контуров, а кисть — для закрашивания областей, ограниченных контурами. Карандашу и кисти, используемым для вывода графики на холсте, соответствуют свойства Реn (карандаш) и Brush (кисть), которые представляют собой объекты типа TPen и TBrush , соответственно. Значения свойств этих объектов определяют вид выводимых графических элементов.

Карандаш

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

Свойство Определяет
Color Цвет линии
Width Толщину линии
Style Вид линии
Mode Режим
отображения

Значение свойства Color определяет цвет линии

Константа Цвет Константа Цвет
clBlack Черный clNavy Темно-синий
clSilver Серебристый clFuchsia Ярко-розовый
clMaroon Каштановый clPurple Розовый
clRed Красный clAqua Бирюзовый
clGreen Зеленый clTeal Зелено-голубой
clLime Салатный clWhite Белый
clOlive Оливковый clGray Серый
clBlue Синий

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

Значение свойства Реn.Style определяет вид линии

Константа Вид линии
psSolid Сплошная линия
psDash Пунктирная линия, длинные штрихи
psDot Пунктирная линия, короткие штрихи
psDashDot Пунктирная линия, чередование длинного
и короткого штрихов
psDashDotDot Пунктирная линия, чередование одного
длинного и двух коротких штрихов
psClear Линия не отображается (используется,
если не надо изображать границу
области, например, прямоугольника)

Значение свойства Реп. Mode влияет на цвет линии

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

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

Кисть

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

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

Значения свойства Brush.Style определяют тип

закрашивания
Константа Тип заполнения (заливки)
области
bsSolid Сплошная заливка
bsClear Область не закрашивается
bsHorizontal Горизонтальная штриховка
bsVertical Вертикальная штриховка
bsFDiagonal Диагональная штриховка с
наклоном линий вперед
bsBDiagonal Диагональная штриховка с
наклоном линий назад
bsCross Горизонтально-вертикальная
штриховка, в клетку
bsDiagCross Диагональная штриховка, в клетку

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru