GdiPlus[31]: IGPPen: 自定义线帽


自定义线帽可以通过两个接口: IGPCustomLineCap、IGPAdjustableArrowCap.

后者继承与前者, 专用于修改箭头线帽.

IGPAdjustableArrowCap 测试效果图:

GdiPlus[31]: IGPPen: 自定义线帽

IGPAdjustableArrowCap 测试代码:


uses GdiPlus;



procedure TForm1.FormPaint(Sender: TObject);

var

  Graphics: IGPGraphics;

  Pen: IGPPen;

  Cap1,Cap2: IGPAdjustableArrowCap;

begin

  Graphics := TGPGraphics.Create(Handle);

  Pen := TGPPen.Create($FFDC143C, 4);



  Cap1 := TGPAdjustableArrowCap.Create(4, 4);

  Cap2 := TGPAdjustableArrowCap.Create(4, 4, False);

  Pen.CustomStartCap := Cap1;

  Pen.CustomEndCap := Cap2;

  Graphics.DrawLine(Pen, 30, 30, 250, 30);



  Cap1 := TGPAdjustableArrowCap.Create(4, 8);

  Cap2 := TGPAdjustableArrowCap.Create(4, 8, False);

  Pen.CustomStartCap := Cap1;

  Pen.CustomEndCap := Cap2;

  Graphics.DrawLine(Pen, 30, 80, 250, 80);

end;


 
   

IGPCustomLineCap 测试效果图:

GdiPlus[31]: IGPPen: 自定义线帽

IGPCustomLineCap 测试代码:


uses GdiPlus;



procedure TForm1.FormPaint(Sender: TObject);

const

  pts: array[0..3] of TGPPoint = ((X:-4; Y:0),(X:0; Y:-4),(X:4; Y:0),(X:0; Y:8));

var

  Graphics: IGPGraphics;

  Pen: IGPPen;

  Path1,Path2: IGPGraphicsPath;

  Cap1,Cap2: IGPCustomLineCap;

  Pt1,Pt2: TGPPoint;

begin

  Graphics := TGPGraphics.Create(Handle);



  Path1 := TGPGraphicsPath.Create;

  Path1.AddEllipse(TGPRect.Create(-3, -3, 6, 6));



  Path2 := TGPGraphicsPath.Create;

  Path2.AddPolygon(pts);



  Pt1.Initialize(50, 30);

  Pt2.Initialize(50, 150);



  Pen := TGPPen.Create($FF8B0000, 3);



  //

  Cap1 := TGPCustomLineCap.Create(nil, Path1);

  Cap2 := TGPCustomLineCap.Create(nil, Path2);

  Pen.CustomStartCap := Cap1;

  Pen.CustomEndCap := Cap2;

  Graphics.DrawLine(Pen, Pt1, Pt2);

  Graphics.TranslateTransform(Pt1.X, 0);



  //

  Cap1 := TGPCustomLineCap.Create(nil, Path1, LineCapFlat, 3);

  Cap2 := TGPCustomLineCap.Create(nil, Path2, LineCapFlat, 4);

  Pen.CustomStartCap := Cap1;

  Pen.CustomEndCap := Cap2;

  Graphics.DrawLine(Pen, Pt1, Pt2);

  Graphics.TranslateTransform(Pt1.X, 0);



  //注意: 使用填充路径时, 对构建路径的参数要求比较古怪...

  Cap1 := TGPCustomLineCap.Create(Path1, nil);

  Cap2 := TGPCustomLineCap.Create(Path2, nil);

  Pen.CustomStartCap := Cap1;

  Pen.CustomEndCap := Cap2;

  Graphics.DrawLine(Pen, Pt1, Pt2);

  Graphics.TranslateTransform(Pt1.X, 0);



  //

  Cap1 := TGPCustomLineCap.Create(Path1, nil);

  Cap2 := TGPCustomLineCap.Create(Path2, nil);

  Cap1.WidthScale := 0.75;

  Cap2.WidthScale := 1.3;

  Pen.CustomStartCap := Cap1;

  Pen.CustomEndCap := Cap2;

  Graphics.DrawLine(Pen, Pt1, Pt2);

end;


 
   

你可能感兴趣的:(自定义)