• Delphi绘图功能[1] —— 入门(绘制直线和矩形)


    目录

    一、👀绘图知识

    二、👀画直线

    ✨画直线示例:

    三、👀画刷填充全框 

    ✨全区域填充颜色示例:

    ✨结果展示: 

    四、👀矩形

    ✨圆角矩形: 

    ✨焦点矩形:

    ✨矩形描边:

    ✨代码示例:

    ✨效果图:


    一、👀绘图知识

    绘图需要有纸、画笔、画刷; Delphi 有 Canvas、Pen、Brush.

    Canvas 就是画布, 譬如窗体的 Canvas 属性, 就是窗体的画布;
    Pen 是画笔, 可以设置笔色、笔宽等等;
    Brush 是画刷, 可以设置颜色等等。

    我们所有绘图操作都是在Canvas上进行的。

    二、👀画直线

    ✨画直线示例:

    1. procedure TForm1.Button1Click(Sender: TObject);
    2. begin
    3. Canvas.Pen.Color := clRed; {设置画笔颜色}
    4. Canvas.Pen.Width := 2; {设置画笔宽度}
    5. Canvas.MoveTo(100,100); {直线起点}
    6. Canvas.LineTo(500,500); {直线起点}
    7. {实际上这里的Canvas是简写,也可以写做; Self.Canvas 或 Form1.Canvas}
    8. end;

    三、👀画刷填充全框 

    ✨全区域填充颜色示例:

    1. procedure TForm1.Button2Click(Sender: TObject);
    2. begin
    3. Canvas.Brush.Color := clPurple; {设置画刷颜色,也就是填充色}
    4. Canvas.FillRect(ClientRect); {填充窗体客户区}
    5. end;

    ✨结果展示: 

    82d458a3e64943068ad055bd505de9e6.png

    四、👀矩形

    圆角矩形: 

    d6da87086aac4e64ab2a8b0bc83c6fed.png

    使用圆角矩形绘制一个圆角矩形使用钢笔和填充它与画笔。矩形的边缘由点(X1,Y1) ,(X2,Y1) ,(X2,Y2) ,(X1,Y2)定义,但是角落将被修剪以创建一个圆形的外观。圆角的曲线与宽 X3和高 Y3的椭圆的曲率相匹配。

    ✨焦点矩形:

    b6df8d8838bf4770a19a419bc0a5bd9b.png

     

    当控件获得或失去输入焦点时,调用 DrawFocusRect 以获得控件图像的周长。因为 DrawFocusRect 使用了一个 XOR 函数,所以在指定相同的矩形时第二次调用它会从屏幕中移除该矩形。

    此函数绘制的矩形无法滚动。要滚动包含 DrawFocusRect 绘制的矩形的区域,请调用 DrawFocusRect 从屏幕上移除该矩形,滚动该区域,然后调用 DrawFocusRect 在新位置绘制该矩形。

    ✨矩形描边:

    使用画布的 Brush 绘制矩形以绘制边框

    使用 FrameRect 在矩形区域周围绘制1像素宽的边框。FrameRect 不使用 Brush 模式填充矩形的内部。

    若要使用 Pen 代替绘制边界,请使用 Polygon 方法。


    ✨代码示例:

    1. unit Unit1;
    2. interface
    3. uses
    4. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    5. Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;
    6. type
    7. TForm1 = class(TForm)
    8. Button2: TButton;
    9. Button3: TButton;
    10. Button4: TButton;
    11. Button5: TButton;
    12. Button1: TButton;
    13. procedure FormCreate(Sender: TObject);
    14. procedure Button2Click(Sender: TObject);
    15. procedure Button1Click(Sender: TObject);
    16. procedure Button3Click(Sender: TObject);
    17. procedure Button4Click(Sender: TObject);
    18. procedure Button5Click(Sender: TObject);
    19. private
    20. { Private declarations }
    21. public
    22. { Public declarations }
    23. end;
    24. var
    25. Form1: TForm1;
    26. implementation
    27. {$R *.dfm}
    28. var
    29. btn : TButton;
    30. //如果参数在函数中不可能修改, 一定要使用 const
    31. const //这里设置了不可修改的两个值
    32. y1 = 100;
    33. y2 = 500;
    34. {在form打开时就自动创建画笔画刷}
    35. procedure TForm1.FormCreate(Sender: TObject);
    36. begin
    37. Canvas.Pen.Width := 4;
    38. Canvas.Pen.Color := clRed;
    39. Canvas.Brush.Color := clWhite; //设置画刷颜色
    40. end;
    41. {1、给出左上角和右下角的坐标就可以绘制矩形}
    42. procedure TForm1.Button1Click(Sender: TObject);
    43. begin
    44. btn := TButton(Sender);
    45. Canvas.Rectangle(btn.Left, y1, btn.Left+btn.Width, y2);
    46. { 左 上边界 右 下边界}
    47. end;
    48. {2、给出一个矩形结构做参数也可以绘制矩形}
    49. procedure TForm1.Button2Click(Sender: TObject);
    50. var
    51. R: TRect; {定义一个矩形结构}
    52. begin
    53. btn := TButton(Sender);
    54. R := Rect(btn.Left, y1, btn.Left+btn.Width, y2);
    55. Canvas.Rectangle(R);
    56. end;
    57. {3、绘制圆角矩形; 前四个参数是矩形左上,右下两个点的坐标,最后两个参数是设置圆角的}
    58. procedure TForm1.Button3Click(Sender: TObject);
    59. begin
    60. btn := TButton(Sender);
    61. Canvas.RoundRect(btn.Left, y1, btn.Left+btn.Width, y2, 200,200);
    62. {最后两个参数越大,圆角弧度越大,}
    63. end;
    64. {4、绘制焦点矩形; 它不受画笔的影响; 它的颜色是和画刷的颜色进行某种运算得来的(与自己定义的无关)}
    65. procedure TForm1.Button4Click(Sender: TObject);
    66. var
    67. R: TRect;
    68. begin
    69. btn := TButton(Sender);
    70. R := Rect(btn.Left, y1, btn.Left+btn.Width, y2);
    71. Canvas.DrawFocusRect(R); //获得焦点显示/隐藏
    72. end;
    73. {5、矩形描边, 用的不是画笔是画刷}
    74. procedure TForm1.Button5Click(Sender: TObject);
    75. var
    76. R: TRect;
    77. begin
    78. btn := TButton(Sender);
    79. R := Rect(btn.Left, y1, btn.Left+btn.Width, y2);
    80. Canvas.FrameRect(R);
    81. end;
    82. end.

    ✨效果图:

    1ceddb75f17f4e3683b5a9e883953829.png

     

    笔者也是Delphi小白,解释如有问题,请大神们帮忙指出修改🙈 

     

  • 相关阅读:
    af-table-column插件的使用 element el-table-column宽度自适应
    20 个提升效率的 JS 简写技巧
    PostgreSQL设置主键为自增
    01【什么是设计模式】
    软件包 - 笔记
    yolov8训练初体验
    有没有必要考取PMP?
    智能家居离线语音识别控制系统设计(SU-03T)
    C#:实现渗透建堆算法(附完整源码)
    电大搜题:江苏开放大学学子的优秀助手
  • 原文地址:https://blog.csdn.net/m0_62853489/article/details/127709278