Любая картинка, чертеж, схема могут рассматриваться как совокупность графических примитивов: точек, линий, окружностей, дуг и др. Таким образом, для того чтобы на экране появилась нужная картинка, программа должна обеспечить вычерчивание (вывод) графических примитивов, составляющих эту картинку. {replace on}
Вычерчивание графических примитивов на поверхности компонента (формы или области вывода иллюстрации) осуществляется применением соответствующих методов к свойству canvas этого компонента.
Линия
Вычерчивание прямой линии осуществляет метод LineTo, инструкция вызова которого в общем виде выглядит следующим образом:
Компонент.Canvas-LineTo(x,у);
Метод LineTo вычерчивает прямую линию от текущей позиции карандаша в точку с координатами, указанными при вызове метода.
Начальную точку линии можно задать, переместив карандаш в нужную точку графической поверхности. Сделать это можно при помощи метода MoveTo, указав в качестве параметров координаты нового положения карандаша.
Вид линии (цвет, толщина и стиль) определяется значениями свойств объекта Реn графической поверхности, на которой вычерчивается линия.
Довольно часто результаты расчетов удобно представить в виде графика. Для большей информативности и наглядности графики изображают на фоне координатных осей и оцифрованной сетки. В листинге 10.2 приведен текст программы, которая на поверхность формы выводит координатные оси и оцифрованную сетку (рис. 10.4).

Листинг 10.2. Оси координат и оцифрованная сетка
01.unit grid__;02.interface03.uses04.Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,05.Dialogs, StdCtrls;06.type07.TForml = class[TForm]08.procedure FonnPaint(Sender; TObject);09.private10.( Private declarations }11.public12.i Public declarations }13.end;14.var15.Forml: TForm1;16.ijoplementation17.(SR *.DEM)18.procedure TForml.FormPaint(Sender: TObject);19. 20.var21.xO,yO:integer; // координаты начала координатных осей22.dx,dy; integer; // шаг- координатной сетки (в пикселах)23.h, w: integer; // высота и ширина области вывода координатной сетки24.х, у: integer;25.lx,ly:real; // метки (оцифровка) линий сетки по X и У26.dlx,dly:real; // mar меток (оцифровки) линяй сетки по X и Y27.cross :integer; // счетчик неоцифрой а иных линий сетки28.dcross:integer;// количество неоцифрованных, линий между оцифрованными29.begin30.хО:=30; уО:=220; // оси начинаются в точке (40,250)31.dxi^O; dy:=40; // шаг координатной сетки 40 пикселов32.dcrossr=l; // помечать линии сетки X: 1 — каждую;33.// 2 — через одну;34.// 3 — через две,-35.dlx:=0.5; // шаг меток оси X36.dly:=1.0; // шаг меток оси У, метками будут: 1, 2, 3 и т. д.37.h:=200;38. 39.w:=300;40.with forml. Canvas do41.begin42.cross:=dcross;43.MoveTo(xO,yO}; LineTo(xO.yO-h) ; // ось X44.MoveTo(xO,yO) ; LineTo(xO+w,yD) ; // ось У45.// засечки, сетка и оцифровка по оси X46.x:=xO+dx;47.lx:=dlx;48.repeat49.MoveTofx, yO-3) ;LineTo(x,yO+3) ; // засечка50.cross ;=cross-l;51.if cross = 0 then // оцифровка52.begin53.TextOut (x-8, yO+5, FloatTostr (Ix) ) ;54.cross:=dcross;55.end;56. 57.Pen.Style:=psDot;58.MoveTo(x,yO-3);LineTo(x,yO-h); // линия сетки59.Pen.Style:=psSolid;60.lx:=lx+dlx;61.x:=x+dx;62.until (x>xO+w);63. 64.// засечки, сетка и оцифровка по оси У65.y:=yO-dy;66.ly:=dly;67.repeat68.MoveTo(хО-3,у);LineTo(xO+3,y]; // засечка69.TextOut{хО-20,у,FloatToStr(ly)); // оцифровка70.Pen.Style:=psDot;71.MoveTo(xO+3,y); LirieTo (xO+w, y); // линия сетки72.Pen.Style:=psSolid;73.y:=y-dy;74.ly:=ly+dly;75.until (y<yO-h);76.and;77.end;78.end.
Особенность приведенной программы заключается в том, что она позволяет задавать шаг сетки и оцифровку. Кроме того, программа дает возможность оцифровывать не каждую линию сетки оси х, а через одну, две, три и т. д. Сделано это для того, чтобы предотвратить возможные наложения изображений чисел оцифровки друг на друга в случае, если эти числа состоят из нескольких цифр.
