Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Координатная сетка

01.01.2007
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.

https://delphiworld.narod.ru/

DelphiWorld 6.0