问题来源: http://www.cnblogs.com/del/archive/2008/05/26/1207811.html#1475006
本例效果图:

代码文件:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} {使用静态数组建立区域} procedure TForm1.Button1Click(Sender: TObject); var arr: array[0..3] of TPoint; rgn: HRGN; w,h: Integer; begin w := ClientWidth; h := ClientHeight; arr[0] := Point(w div 2, 0); arr[1] := Point(w, h div 2); arr[2] := Point(w div 2, h); arr[3] := Point(0, h div 2); rgn := CreatePolygonRgn(arr, Length(arr), WINDING); {下面是描边和填充这个区域} Canvas.Brush.Color := clSilver; FrameRgn(Canvas.Handle, rgn, Canvas.Brush.Handle, 1, 1); Canvas.Brush.Style := bsCross; FillRgn(Canvas.Handle, rgn, Canvas.Brush.Handle); end; {使用动态数组建立区域} procedure TForm1.Button2Click(Sender: TObject); var arr: array of TPoint; rgn: HRGN; w,h: Integer; begin SetLength(arr, 4); w := ClientWidth; h := ClientHeight; arr[0] := Point(w div 2, 0); arr[1] := Point(w, h div 2); arr[2] := Point(w div 2, h); arr[3] := Point(0, h div 2); rgn := CreatePolygonRgn(arr[0], Length(arr), WINDING); {第一个参数是数组的起点} {下面是描边和填充这个区域} Canvas.Brush.Color := clRed; FrameRgn(Canvas.Handle, rgn, Canvas.Brush.Handle, 1, 1); Canvas.Brush.Style := bsCross; FillRgn(Canvas.Handle, rgn, Canvas.Brush.Handle); end; end.
窗体文件:
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 175 ClientWidth = 289 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Button1: TButton Left = 208 Top = 113 Width = 75 Height = 25 Caption = 'Button1' TabOrder = 0 OnClick = Button1Click end object Button2: TButton Left = 208 Top = 144 Width = 75 Height = 25 Caption = 'Button2' TabOrder = 1 OnClick = Button2Click end end
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2008-03-12 学习 TTreeView [7] - Insert、Delete
2008-03-12 学习 TTreeView [6] - SaveToFile、LoadFromStream、SaveToStream、LoadFromFile
2008-03-12 学习 TTreeView [5] - TTreeNode.Level 属性
2008-03-12 判断一个对象是否存在, 谁更快?
2008-03-12 学习 TTreeView [4] - TTreeNode 类的常用属性与 TTreeView 类的 OnChange 事件