本例效果圖:
代碼文件:unit Unit1;
窗體文件:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses GDIPOBJ, GDIPAPI;
var pts: array[0..6] of TGPPoint;
procedure TForm1.FormCreate(Sender: TObject);
begin
pts[0].X := 10; pts[0].Y := 50;
pts[1].X := 40; pts[1].Y := 90;
pts[2].X := 80; pts[2].Y := 10;
pts[3].X := 110; pts[3].Y := 50;
pts[4].X := 140; pts[4].Y := 10;
pts[5].X := 180; pts[5].Y := 90;
pts[6].X := 210; pts[6].Y := 50;
CheckBox1.Caption := '翻轉路徑中的點';
CheckBox2.Caption := '清空路徑中的點';
end;
procedure TForm1.FormPaint(Sender: TObject);
var
g: TGPGraphics;
p: TGPPen;
path: TGPGraphicsPath;
PathPts: array of TGPPoint;
i: Integer;
begin
g := TGPGraphics.Create(Canvas.Handle);
p := TGPPen.Create(aclRed, 2);
path := TGPGraphicsPath.Create;
path.AddBezIErs(PGPPoint(@pts), Length(pts));
if CheckBox1.Checked then path.Reverse;
if CheckBox2.Checked then path.Reset;
{Reset 時, 會清空 PathPoints 和 PathTypes 數組並將 FillMode 設置為 FillModeAlternate}
SetLength(PathPts, path.GetPointCount);
path.GetPathPoints(PGPPoint(PathPts), Length(PathPts));
Canvas.Pen.Color := clGray;
for i := Low(PathPts) to High(PathPts) do
Canvas.TextOut(PathPts[i].X, PathPts[i].Y, IntToStr(i+1));
g.DrawPath(p, path);
path.Free;
p.Free;
g.Free;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Repaint;
end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
Repaint;
end;
end.object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClIEntHeight = 156
ClIEntWidth = 232
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poDesktopCenter
OnCreate = FormCreate
OnPaint = FormPaint
PixelsPerInch = 96
TextHeight = 13
object CheckBox1: TCheckBox
Left = 12
Top = 126
Width = 113
Height = 17
Caption = 'CheckBox1'
TabOrder = 0
OnClick = CheckBox1Click
end
object CheckBox2: TCheckBox
Left = 123
Top = 126
Width = 106
Height = 17
Caption = 'CheckBox2'
TabOrder = 1
OnClick = CheckBox2Click
end
end