Линия
Вычерчивание
прямой линии осуществляет метод LinеТо, инструкция вызова которого в общем виде
выглядит следующим образом:
Компонент.Canvas.LineTo(x,у)
Метод LinеТо
вычерчивает прямую линию от текущей позиции карандаша в точку с координатами,
указанными при вызове метода.
Начальную точку
линии можно задать, переместив карандаш в нужную точку графической поверхности.
Сделать это можно при помощи метода MoveTo, указав в качестве параметров
координаты нового положения карандаша.
Вид линии
(цвет, толщина и стиль) определяется значениями свойств объекта Реп графической
поверхности, на которой вычерчивается линия.
Довольно часто
результаты расчетов удобно представить в виде графика. Для большей
информативности и наглядности графики изображают на фоне координатных осей и
оцифрованной сетки. В листинге 10.2 приведен текст программы, которая на
поверхность формы выводит координатные оси и оцифрованную сетку (рис.
10.4).
Рис. 10.4.
Форма приложения Координатная сетка
Листинг
10.2. Оси координат и оцифрованная сетка
unit grid_;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure
TForm1.FormPaint(Sender: TObject);
var
x0,y0:integer; //
координаты начала координатных осей
dx,dy:integer; // шаг
координатной сетки (в пикселах)
h,w:integer; // высота и
ширина области вывода координатной сетки
х,у:integer;
lx,ly:real; // метки
(оцифровка) линий сетки по X и Y
dlx,dly:real; // шаг меток
(оцифровки) линий сетки по X и Y
cross:integer; // счетчик
неоцифрованных линий сетки
dcross:integer;//
количество неоцифрованных линий между оцифрованными
begin
х0:=30; у0:=220; // оси начинаются в точке (40,250)
dx:=40; dy:=40; // шар координатной сетки 40 пикселов
dcross:=1; // помечать
линии сетки X: 1 — каждую;
// 2 — через
одну;
// 3 — через
две;
dlx:=0.5; // шаг меток оси
X
dly:=1.0; // шаг меток оси
Y, метками будут: 1, 2, 3 и т. д.
h:=200;
w:=300;
with forml.Canvas
do begin
cross:=dcross;
MoveTo(x0,v0);
LineTo(x0,y0-h); // ось X
MoveTo(x0,y0);
LineTo(x0+w, y0); // ось Y
// засечки, сетка и
оцифровка по оси X
x:=x0+dx;
lx:=dlx;
repeat
MoveTo(x,y0-3);LineTo(x,yO+3);
// засечка
cross:=cross-l;
if cross = 0 then
// оцифровка
begin
TextOut(x-8,y0+5,FloatToStr(lx));
cross:=dcross ;
end;
Pen.Style:=psDot;
MoveTo(x,y0-3);LineTo(x,y0-h); // линия сетки
Pen.Style:=psSolid;
lx:=lx+dlx;
x:=x+dx;
until
(x>x0+w);
// засечки, сетка и
оцифровка по оси Y
y:=y0-dy;
ly:=dly;
repeat
MoveTo(х0-3,у);LineTo(х0+3,у);
// засечка
TextOut(х0-20,у,FloatToStr(1у));
// оцифровка
Pen.Style:=psDot;
MoveTo(х0+3,у);
LineTo(x0+w,у); // линия сетки
Pen.Style:=psSolid;
y:=y-dy;
ly:=ly+dly; until (y<y0-h);
end;
end;
end.
Особенность приведенной программы заключается в том, что она позволяет задавать шаг сетки и оцифровку. Кроме того, программа дает возможность оцифровывать не каждую линию сетки оси х, а через одну, две, три и т. д. Сделано это для того, чтобы предотвратить возможные наложения изображений чисел оцифровки друг на друга в случае, если эти числа состоят из нескольких цифр.