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.

null

Оценка - 1.2 (23)

2008-02-27 • Просмотров [ 7363 ]