摘抄自:万一的博客
安装头文件:http://www.cnblogs.com/del/archive/2008/06/06/1215319.html
目录
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses GDIPOBJ, GDIPAPI; //头文件 procedure TForm1.FormPaint(Sender: TObject); var g: TGPGraphics; //我试了一下 p: TGPPen; begin
{这里我遇到一个问题,我把 g 的 Create 放到FormCreate方法中,把g.free放到FormDestroy里面的时候
下面的draw会画不出东西来,包括g.Clear也没用了,为什么?为什么??}
g := TGPGraphics.Create(Canvas.Handle);//记住这个东西一定要随操作放在一起,在一起,在一起……
p := TGPPen.Create(MakeColor(255,0,0), 2);
g.Clear(MakeColor(255,255,255)); g.DrawLine(p, 20, 40, 200, 40); {参数是整数} g.DrawLine(p, MakePoint(20,60), MakePoint(200,60)); {参数是点(整数)} g.DrawLine(p, 20.9, 80.0, 200.9, 80.0); {参数是小数} g.DrawLine(p, MakePoint(20.9, 100.0), MakePoint(200.9, 100.0)); {参数是点(小数)} g.Free; p.Free; end; end.
//使用数组记录端点 PtArr: array of TGPPoint; //绘制一组直线, 其实就是从七点开始依次将相邻的点连接 {如果是动态数组的话, 需要 @PtArr, 但动态数组本身就是个指针} g.DrawLines(p, PGPPoint(PtArr), Length(PtArr));
//绘制矩形 //x, y, w, h:Integer; p.SetColor(aclRed); g.DrawRectangle(p, x, y, w, h); p.SetColor(aclGold); g.DrawRectangle(p, MakeRect(x, y, w, h));
//矩形变量 Rect: TGPRect; RectArr: array[0..31] of TGPRect; //矩形的属性 Rect.X := 0; Rect.Y := 0; Rect.Width := ClientWidth; Rect.Height := ClientHeight; //绘制矩形 g.DrawRectangles(p, PGPRect(@RectArr), Length(RectArr));
//椭圆形
g.DrawEllipse(p, x, y, w, h);
//绘制椭圆形 //x, y, w, h:Integer; //a1, a2:Integer; //a1是开始角度(0 表示在圆心的正右边开始画),a2是要画的弧度. //a1 + a2 > 0 是顺时针角度,< 0 是逆时针角度 g.DrawArc(p, x, y, w, h, a1, a2);
//绘制扇形,具体参考绘制弧形
g.DrawPie(p, x, y, w, h, a1, a2);
//可参考绘制一组直线的方法,差别只是多了一条起点和重点间的连线
g.DrawPolygon(p, PGPPoint(PtArr), Length(PtArr));
//参考多边形,差别是多边形曲线多了一个属性tension(控制弯曲程度) var tension: Single; {最后一个参数是可选的, 默认值是 0.5, 为 0 时曲线会转为直线段} g.DrawClosedCurve(p, PGPPoint(PtArr), Length(PtArr),tension);
//参考闭合曲线,区别是不闭合 //第四、五位是数组中的起始和结束的序数 {后面三个参数是可选的, 最后参数的默认值是 0.5, 为 0 时曲线会转为直线段} g.DrawCurve(p, PGPPoint(PtArr), Length(PtArr), n1, n2, tension);