Delphi 绘图TCanvas类[3] TPen类参数及介绍
Delphi 绘图TCanvas类[3] TPen类参数及介绍
1、TPen(用于在画布上绘制线条或轮廓形状)
单元:Graphics
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | TPen = class (TGraphicsObject) private FMode: TPenMode; procedure GetData( var PenData: TPenData); procedure SetData( const PenData: TPenData); protected function GetColor: TColor; procedure SetColor(Value: TColor); function GetHandle: HPen; procedure SetHandle(Value: HPen); procedure SetMode(Value: TPenMode); function GetStyle: TPenStyle; procedure SetStyle(Value: TPenStyle); function GetWidth: Integer ; procedure SetWidth(Value: Integer ); public constructor Create; destructor Destroy; override; procedure Assign(Source: TPersistent); override; property Handle: HPen read GetHandle write SetHandle; published property Color: TColor read GetColor write SetColor default clBlack; property Mode: TPenMode read FMode write SetMode default pmCopy; property Style: TPenStyle read GetStyle write SetStyle default psSolid; property Width: Integer read GetWidth write SetWidth default 1 ; end ; |
TPen 主要属性: Color、Width、Style、Mode
2、TPenStyle(确定画笔绘制线条的样式)
- psSolid = 0; {实线.}
- psDash = 1; {段线. 由一系列破折号组成的线,要求笔宽<=1}
- psDot = 2; {点线. 由一系列点组成的线,要求笔宽<=1}
- psDashDot = 3; {线和点. 由交替的破折号和点组成的线,要求笔宽<=1}
- psDashDotDot = 4; {线点点. 由一系列虚线-点-点组合组成的线,要求笔宽<=1}
- psClear = 5; {不绘制线条(用于省略使用当前笔绘制轮廓的形状周围的线条)} {不可见}
- psInsideFrame = 6; {实线,但如果宽度大于1,则可能使用抖动颜色. 笔宽是向里扩展}
- psUserStyle = 7; {自定义, Delphi.Net 支持}
- psAlternate = 8; {交替, Delphi.Net 支持}
示例1:红色实线
1 2 3 | Canvas . Pen . Color := clRed; Canvas . Pen . Style := psSolid ; //或:Canvas.Pen.Style := TPenStyle(0); |
示例2:(在最大化的窗体上绘制许多大小和颜色各异的矩形)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | var qX, qY: Integer ; procedure TForm1 . BitBtn1Click(Sender: TObject); begin Timer1 . Enabled:= not Timer1 . Enabled; if Timer1 . Enabled then begin WindowState := wsMaximized; Timer1 . Interval := 50 ; Randomize; end else begin WindowState := wsNormal; end ; end ; procedure TForm1 . Timer1Timer(Sender: TObject); begin qX := Random(Screen . Width - 10 ); qY := Random(Screen . Height - 10 ); Canvas . Pen . Color := Random( 65535 ); case Random( 5 ) of 0 : Canvas . Pen . Style := psSolid; 1 : Canvas . Pen . Style := psDash; 2 : Canvas . Pen . Style := psDot; 3 : Canvas . Pen . Style := psDashDot; 4 : Canvas . Pen . Style := psDashDotDot; end ; Canvas . Rectangle(qX, qY, qX + Random( 400 ), qY + Random( 400 )); end ; |
3、TPenMode(指示笔的颜色如何与画布的颜色交互)
单元:Graphics 或 QGraphics
1 | type TPenMode = (pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy, pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge, pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor); |
- pmBlack {总是黑色的}
- pmWhite {总是白色的}
- pmNop {不变的,画笔无效}
- pmNot {画布背景色的反转,背景色取反}
- pmCopy {颜色属性中指定的笔颜色,画笔设置的颜色}
- pmNotCopy {画笔颜色取反}
- pmMergePenNot {画笔颜色与画布背景颜色的反色的组合}
- pmMaskPenNot {画笔颜色与画布背景公共色的反色的组合}
- pmMergeNotPen {画笔颜色取反后与画布背景颜色的组合}
- pmMaskNotPen {画笔的反色与画布背景的公共色的组合}
- pmMerge {画笔颜色与画布背景颜色的组合}
- pmNotMerge {pmMerge的反向:笔色和画布背景色的组合}
- pmMask {画笔与背景公共颜色的组合}
- pmNotMask {pmMask 的反色}
- pmXor {画笔颜色与背景颜色的 Xor 组合}
- pmNotXor {pmXor 的反色}
例如:
1 2 | Canvas . Pen . Mode := pmBlack; //或:Canvas.Pen.Mode := TPenMode(0); |
创建时间:2020.02,01 更新时间:2022.04.12
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报