Пример 15.1.
Создать программу рисования в форме графика функции с поясняющим текстом. Проект – приложение. Функция – синус. Программа предусматривает три варианта рисования графика:
- Точками с помощью свойства Pixels (график в левой верхней части окна).
- Линиями с использованием метода LineTo (график в нижней левой части окна).
- С использованием компонента TChart (в правой части окна).
Окно формы в начале конструирования содержит компоненты:
- Кнопка Button1 (Рисовать). Она вызывает построение графиков в окне.
- Chart1. Компонент построения графиков из страницы Additional.
Для подготовки Chart к работе используется свойства этого компонента, определенные в модуле TAEngine. В список uses его надо добавить, по умолчанию его нет.
Листинг модуля формы
unit Prg_15_1_;
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
TAGraph, TASeries, Buttons, StdCtrls, TAEngine;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Chart1: TChart;
procedure Button1Click(Sender: TObject);
private
s:TSerie;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,amp,x01,y01,x02,y02,imax,t ,func:integer;
begin
imax:=100; // число точек в периоде
t:=3; // число периодов
amp:=70; // амплитуда
x01:=20; // начала координат
x02:=20;
y01:=20+amp;
y02:=y01+2*amp+40;
// Рисуем график с Pixels
Canvas.TextOut(0,0,’График функции с Pixels’);
Canvas.MoveTo(x01,y01); // Рисуем ось X
Canvas.LineTo(x01+imax*t,y01);
Canvas.MoveTo(x01,y01+amp); // Рисуем ось Y
Canvas.LineTo(x01,y01-amp);
for i:=0 to imax*t do // Рисуем график
begin
func:=-round(amp*sin(2*pi/imax*i));
Canvas.Pixels[x01+i,y01+round(func)]:=clBlack;
end;
// Рисуем график с LineTo
Canvas.TextOut(x02,y02-amp-20,’График функции c LineTo’);
Canvas.MoveTo(x02,y02); //Рисуем ось X
Canvas.LineTo(x02+imax*t,y02);
Canvas.MoveTo(x02,y02+amp); //Рисуем ось Y
Canvas.LineTo(x02,y02-amp);
for i:=0 to imax*t do //Рисуем график
begin
func:=-round(amp*sin(2*pi/imax*i));
Canvas.LineTo(x02+i,y02+round(func));
end;
// Рисуем график в компонентеTChart
s:=TSerie.Create(Chart1);
s.ShowLines:=true;
s.ShowPoints:=false;
s.Title:=’Мой график’;
chart1.AddSerie(s);
for i:=0 to imax*t do
begin
func:=round(amp*sin(2*pi/imax*i));
s.AddXY(i,func, ‘График’,clRed);
end;
end;
initialization
{$I prg_15_1_.lrs}
end.
Ниже представлено окна работающего приложения проекта. Оно возникает при нажатии кнопки Рисовать. В окне видны графики одной и той же функции, построенные разными способами:
- С использованием свойства Pixels (вверху слева).
- С использованием метода LineTo (внизу слева).
- С помощью компонента TChart (справа).
Выводы
Для рисования используется класс Canvas (поверхность рисования, холст).
Многие компоненты имеют свойство Canvas. Например, Form (форма), компонент Image (изображение).
Canvas имеет два инструмента: Pen (перо) для рисования линий, Brush (кисть) для заливки областей.
Pen имеет свойства:
- Color – цвет линии, значения с префиксом cl (например, clRed),
- Style – тип линии, значения с префиксом ps (например, psSolid, принято по умолчанию),
- Width – толщина линии, в пикселах (по умолчанию 1),
- Mode – режим взаимодействия с поверхностью холста, значения с префиксом pm (например, pmCopy – писать цветом пера, режим по умолчанию),
Brush имеет свойства:
- Color – цвет заливки,
- Style – стиль заливки, значения с префиксом bs (Например, bsCross).
Для рисования графиков функций используются свойство TCanvas.Pixel(x,y) и метод TCanvas.LineTo. Второй метод дает более качественный график.
Для построения графиков есть компонент TChart, позволяющий автоматизировать значительную часть операций.