Delphi-Help

Главная Статьи Canvas Координатная сетка

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

Оцените материал
(1 Голосовать)


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

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.
Прочитано 6428 раз
Другие материалы в этой категории: Кораблик »

Авторизация



Счетчики