Методы вычерчивания графических примитивов. Линия.
Листинг 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.
Особенность приведенной программы заключается в том, что она позволяет задавать шаг сетки и оцифровку. Кроме того, программа дает возможность оцифровывать не каждую линию сетки оси х, а через одну, две, три и т. д. Сделано это для того, чтобы предотвратить возможные наложения изображений чисел оцифровки друг на друга в случае, если эти числа состоят из нескольких цифр.