StartCap 和 EndCap 属性分别用来读写两段的线帽, 测试图:
StartCap 和 EndCap 测试代码:
uses GdiPlus; procedure TForm1.FormPaint(Sender: TObject); const CapArr: array[0..8] of Byte = (0, 1, 2, 3, $10, $11, $12, $13, $14); var Graphics: IGPGraphics; Pen: IGPPen; Pt1,Pt2: TGPPoint; i: Integer; begin Pt1.Initialize(20, 20); Pt2.Initialize(200, 20); Graphics := TGPGraphics.Create(Handle); Pen := TGPPen.Create($FF2E8B57, 11); for i := 0 to Length(CapArr) - 1 do begin Pen.StartCap := TGPLineCap(CapArr[i]); Pen.EndCap := Pen.StartCap; Graphics.DrawLine(Pen, Pt1, Pt2); Graphics.TranslateTransform(0, Pt1.Y * 1.5); end; end;
DashCap 属性用来读写虚线线帽, 这在实线中没有效果; 测试图:
DashCap 测试代码:
uses GdiPlus; procedure TForm1.FormPaint(Sender: TObject); var Graphics: IGPGraphics; Pen: IGPPen; Pt1,Pt2: TGPPoint; begin Pt1.Initialize(20, 20); Pt2.Initialize(240, 20); Graphics := TGPGraphics.Create(Handle); Pen := TGPPen.Create($FF4169E1, 11); Pen.DashStyle := DashStyleDashDot; Pen.DashCap := DashCapFlat; Graphics.DrawLine(Pen, Pt1, Pt2); Graphics.TranslateTransform(0, Pt1.Y * 1.5); Pen.DashCap := DashCapRound; Graphics.DrawLine(Pen, Pt1, Pt2); Graphics.TranslateTransform(0, Pt1.Y * 1.5); Pen.DashCap := DashCapTriangle; Graphics.DrawLine(Pen, Pt1, Pt2); end;
可通过 SetLineCap 方法一起设定 StartCap、EndCap、DashCap, 测试图:
SetLineCap 测试代码:
uses GdiPlus; procedure TForm1.FormPaint(Sender: TObject); var Graphics: IGPGraphics; Pen: IGPPen; begin Graphics := TGPGraphics.Create(Handle); Pen := TGPPen.Create($FFC71585, 11); Pen.DashStyle := DashStyleDashDot; Pen.SetLineCap(LineCapRoundAnchor, LineCapArrowAnchor, DashCapTriangle); Graphics.DrawLine(Pen, 20, 30, 300, 30); end;