在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本例效果图: DrawPie:绘制一个扇形,该形状由一个坐标对、宽度、高度以及从起始角度到旋转角度的两条射线所连接的椭圆定义。 procedure TForm1.FormPaint(Sender: TObject);//编程form1的onPaint事件代码如下 var g:TGPGraphics; //定义绘图表面类变量 p:TGPPen; //定义画笔类变量 begin g:=TGPGraphics.Create(Canvas.Handle); //创建绘图表面对象 p:=TGPPen.Create(aclRed,2); //创建画笔对象 g.Clear(aclWhite); //清除整个绘图面并以白色填充 g.DrawPie(p,10,10,200,100,0,350); //在绘图表面画一个饼形(也可以叫扇形) p.Free; //用完成对象记得释放 g.Free; //用完成对象记得释放 end;
怎么样?是不是觉得与画弧形很像?其实不是同一个东西哦。。。 好吧,为了让大家理解‘起始角度’和‘旋转角度’这两个东东,我把程度再改一改,看下图与代码 unit Unit1; interface uses //系统自动生成 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin, ExtCtrls; type //在窗体上添加了一个TPanel,两个TLabel,两个TSpinEdit。 TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; Label2: TLabel; SpinEdit1: TSpinEdit; SpinEdit2: TSpinEdit; procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses GDIPOBJ, GDIPAPI; //加入这两个GDI+要用到的单元 var a1,a2: Integer; //声明两个本单元文件内要用到的全局变量(用于起始角度和旋转角度) procedure TForm1.FormCreate(Sender: TObject); begin a1 := 0; //初始化起始角度 SpinEdit1.Text := IntToStr(a1); a2 := 30; //初始化旋转角度 SpinEdit2.Text := IntToStr(a2); SpinEdit1.Increment := 10; //步进 SpinEdit2.Increment := 10; SpinEdit1.OnChange := FormPaint; //组件OnChange指向FormPaint SpinEdit2.OnChange := FormPaint; end; procedure TForm1.FormPaint(Sender: TObject); var g: TGPGraphics; p: TGPPen; x,y,w,h: Integer; begin g := TGPGraphics.Create(Canvas.Handle); p := TGPPen.Create(aclRed, 2); g.Clear(aclWhite); x := ClientWidth div 6; y := ClientHeight div 6; w := x * 4; h := y * 3; a1 := StrToIntDef(SpinEdit1.Text, 0); //此函数用于检查用户在SpinEdit输入的数值 a2 := StrToIntDef(SpinEdit2.Text, 30); //如果用户输入英文之类的字符SpinEdit将回复为参数2 g.DrawPie(p, x, y, w, h, a1, a2); //画扇形 g.Free; p.Free; end; end. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论