Функция, которая нарисует на форме сетку и сделает форму похожей на дизайнер форм Delphi
Falk0ner, вс, 06/07/2008 - 15:34.
Ещё способ, рисует сетку либо линии на компоненте AObject цветом FGridColor, в параметре ACanvas нужно передать холст компонента, FSizeX и FSizeY определяют размер сетки либо линий:
Функция, которая нарисует на форме сетку и сделает форму похожей на дизайнер форм Delphi
Функция, которая нарисует на форме сетку и сделает форму похожей на дизайнер форм 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;
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;
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 http://forum.vingrad.ru
Отправить комментарий