Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Программа и Интерфейс , Формы

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

Code:

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 определяют размер сетки либо линий:

Code:

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

Функция DrawGrid в первом коде создает сетку на форме, аналогично умолчанию размера сети 8 пикселей в дизайнере Delphi. Она создает временный битмап, заполняет его цветом (в этом случае clBtnFace) и затем рисует черные линии вдоль краев битмапа для создания сети.

Функция Draw во втором коде используется для рисования либо точек, либо линий на контроле (например, форме), в зависимости от типа сети, указанного. Она принимает пять параметров: контролл для рисования, канвас для рисования, тип сети (либо точки, либо линии), цвет сети и размер сети.

Вот подробное описание работы этих функций:

DrawGrid

  1. Создает временный битмап (TmpBmp) с шириной и высотой 8 пикселей.
  2. Заполняет битмап цветом (clBtnFace) с помощью Canvas.FillRect.
  3. Рисует черные линии вдоль краев битмапа с помощью Canvas.Pixels[0, 0] := clBlack; и аналогичного кода.
  4. Присваивает временный битмап канвасу формы с помощью Bitmap.Assign(TmpBmp);.
  5. Освобождает временный битмап с помощью TmpBmp.Free;.

Draw

  1. Вычисляет максимальные координаты x и y сетки на основе клиентской ширины и высоты контрола, разделенных на размер сети.
  2. В зависимости от типа сети (FGridType), либо:
    • Рисует точки на каждом пересечении сетки с помощью SetPixel, или
    • Рисует линии вдоль краев сетки с помощью ACanvas.Pen.Color := FGridColor; и аналогичного кода.
  3. Устанавливает цикл для рисования линий сетки в зависимости от типа сети.

В целом, эти функции могут использоваться для создания сети на форме с настраиваемым размером и цветом. Первая функция имеет более ограниченную функциональность, а вторая функция предоставляет больше гибкости, позволяя выбрать между рисованием точек или линий.

Некоторые возможные улучшения этих функций включают:

  • Добавление опций для настройки внешнего вида сети, таких как изменение ширины линии или добавление дополнительных цветов.
  • Использование более эффективного алгоритма рисования сетки, особенно для больших сетей или форм с сложными формами.
  • Увеличение гибкости в отношении типов контролов, которые могут использоваться с этими функциями (например, не только формы).
  • Добавление обработки ошибок для случаев, когда форма или контролл null или имеет неправильный размер.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Формы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 11:13:05/0.0031700134277344/0