Координатная сетка
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;
// высота и ширина области вывода координатной сетки x, y: integer;
lx, ly: real;
// метки (оцифровка) линий сетки по X Y
dlx, dly: real;
// шаг меток (оцифровки) линий сетки по X и Y cross: integer;
// счетчик не оцифрованных линий сетки dcross: integer;
// количество не оцифрованных линий между оцифрованными begin x0 := 30;
y0 := 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 form1.Canvas do
begin
cross := dcross;
MoveTo(x0, y0);
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, y0 + 3); // засечка
cross := cross - 1;
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(x0 - 3, y);
LineTo(x0 + 3, y); // засечка
TextOut(x0 - 20, y, FloatToStr(ly));
// оцифровка
Pen.Style := psDot;
MoveTo(x0 + 3, y);
LineTo(x0 + w, y); // линия сетки
Pen.Style := psSolid; y := y - dy;
ly := ly + dly;
until (y < y0 - h);
end;
end; end. |