Любая картинка, чертеж, схема могут рассматриваться как совокупность графических примитивов: точек, линий, окружностей, дуг и др. Таким образом, для того чтобы на экране появилась нужная картинка, программа должна обеспечить вычерчивание (вывод) графических примитивов, составляющих эту картинку. {replace on}
Вычерчивание графических примитивов на поверхности компонента (формы или области вывода иллюстрации) осуществляется применением соответствующих методов к свойству canvas этого компонента.
Линия
Вычерчивание прямой линии осуществляет метод LineTo, инструкция вызова которого в общем виде выглядит следующим образом:
Компонент.Canvas-LineTo(x,у);
Метод LineTo вычерчивает прямую линию от текущей позиции карандаша в точку с координатами, указанными при вызове метода.
Начальную точку линии можно задать, переместив карандаш в нужную точку графической поверхности. Сделать это можно при помощи метода MoveTo, указав в качестве параметров координаты нового положения карандаша.
Вид линии (цвет, толщина и стиль) определяется значениями свойств объекта Реn графической поверхности, на которой вычерчивается линия.
Довольно часто результаты расчетов удобно представить в виде графика. Для большей информативности и наглядности графики изображают на фоне координатных осей и оцифрованной сетки. В листинге 10.2 приведен текст программы, которая на поверхность формы выводит координатные оси и оцифрованную сетку (рис. 10.4).
Листинг 10.2. Оси координат и оцифрованная сетка
01.
unit
grid__;
02.
interface
03.
uses
04.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
05.
Dialogs, StdCtrls;
06.
type
07.
TForml =
class
[TForm]
08.
procedure
FonnPaint(Sender; TObject);
09.
private
10.
( Private declarations }
11.
public
12.
i Public declarations }
13.
end
;
14.
var
15.
Forml: TForm1;
16.
ijoplementation
17.
(SR *.DEM)
18.
procedure
TForml
.
FormPaint(Sender: TObject);
19.
20.
var
21.
xO,yO:
integer
;
// координаты начала координатных осей
22.
dx,dy;
integer
;
// шаг- координатной сетки (в пикселах)
23.
h, w:
integer
;
// высота и ширина области вывода координатной сетки
24.
х, у:
integer
;
25.
lx,ly:
real
;
// метки (оцифровка) линий сетки по X и У
26.
dlx,dly:
real
;
// mar меток (оцифровки) линяй сетки по X и Y
27.
cross :
integer
;
// счетчик неоцифрой а иных линий сетки
28.
dcross:
integer
;
// количество неоцифрованных, линий между оцифрованными
29.
begin
30.
хО:=
30
; уО:=
220
;
// оси начинаются в точке (40,250)
31.
dxi^O; dy:=
40
;
// шаг координатной сетки 40 пикселов
32.
dcrossr=l;
// помечать линии сетки X: 1 — каждую;
33.
// 2 — через одну;
34.
// 3 — через две,-
35.
dlx:=
0.5
;
// шаг меток оси X
36.
dly:=
1.0
;
// шаг меток оси У, метками будут: 1, 2, 3 и т. д.
37.
h:=
200
;
38.
39.
w:=
300
;
40.
with
forml. Canvas
do
41.
begin
42.
cross:=dcross;
43.
MoveTo(xO,yO}; LineTo(xO
.
yO-h) ;
// ось X
44.
MoveTo(xO,yO) ; LineTo(xO+w,yD) ;
// ось У
45.
// засечки, сетка и оцифровка по оси X
46.
x:=xO+dx;
47.
lx:=dlx;
48.
repeat
49.
MoveTofx, yO-
3
) ;LineTo(x,yO+
3
) ;
// засечка
50.
cross ;=cross-l;
51.
if
cross =
0
then
// оцифровка
52.
begin
53.
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.
repeat
68.
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
.
Особенность приведенной программы заключается в том, что она позволяет задавать шаг сетки и оцифровку. Кроме того, программа дает возможность оцифровывать не каждую линию сетки оси х, а через одну, две, три и т. д. Сделано это для того, чтобы предотвратить возможные наложения изображений чисел оцифровки друг на друга в случае, если эти числа состоят из нескольких цифр.