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

Функция, которая нарисует на форме сетку и сделает форму похожей на дизайнер форм Delphi

01.01.2007

Функция, которая нарисует на форме сетку и сделает форму похожей на дизайнер форм Delphi. По умолчанию в дизайнере Delphi отступы равны 8 пикселям

procedure TForm1.DrawGrid;
var
  TmpBmp: TBitmap;
begin
  TmpBmp := TBitmap.Create;
  try
    with TmpBmp do
    begin
      Width := 8;
      Height := 8;
      Canvas.Brush.Color := clBtnFace;
      Canvas.FillRect(TmpBmp.Canvas.ClipRect);
      Canvas.Pixels[0, 0] := clBlack;
      Canvas.Pixels[0, Height] := clBlack;
      Canvas.Pixels[Width, 0] := clBlack;
      Canvas.Pixels[Width, Height] := clBlack;
    end;
    with Canvas, Brush do
    begin
      Bitmap := TBitmap.Create;
      try
        Bitmap.Assign(TmpBmp);
        Canvas.FillRect(Canvas.ClipRect);
      finally
        Bitmap.Free;
      end;
    end;
  finally
    TmpBmp.Free;
  end;
end;
 
{ Использование }
procedure TForm1.FormPaint(Sender: TObject);
begin
  DrawGrid; 
end;

Ещё способ, рисует сетку либо линии на компоненте AObject цветом FGridColor, в параметре ACanvas нужно передать холст компонента, FSizeX и FSizeY определяют размер сетки либо линий:

...
  TGridType = (gtDots, gtLines);
...
procedure Draw(AObject: TControl; ACanvas: TCanvas; FGridType: TGridType; FGridColor: TColor;
  FSizeX, FSizeY: Integer);
var
  ColorRGB, X, Y, MaxX, MaxY: Integer;
  DC: HDC;
begin
  MaxX := AObject.ClientWidth Div FSizeX;
  MaxY := AObject.ClientHeight Div FSizeY;
  case FGridType of
    gtDots:
      begin
        ColorRGB := ColorToRGB(FGridColor);
        DC := ACanvas.Handle;
        For X := 0 To MaxX Do
          For Y := 0 To MaxY Do
          SetPixel(DC, X * FSizeX, Y * FSizeY, ColorRGB);
      End;
    gtLines:
      begin
        ACanvas.Pen.Color := FGridColor;
        for X := 0 to MaxX do
        Begin
          ACanvas.MoveTo(X * FSizeX, 0);
          ACanvas.LineTo(X * FSizeY, AObject.ClientHeight);
        end;
        for Y := 0 to MaxY do
        begin
          ACanvas.MoveTo(0, Y * FSizeY);
          ACanvas.LineTo(AObject.ClientWidth, Y * FSizeY);
        end;
      end;
  end;
end;

Автор: Rrader

Взято с Vingrad.ru https://forum.vingrad.ru