zoukankan      html  css  js  c++  java
  • GdiPlus[31]: IGPPen: 自定义线帽


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

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

    IGPAdjustableArrowCap 测试效果图:



    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 测试效果图:



    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;
    
  • 相关阅读:
    xsos:一个在Linux上阅读SOSReport的工具
    RHEL sosreport
    sosreport -a --report
    环境变量
    读研重要的是要明白你自己要干什么, 不能等导师来告诉你你应该干什么. 研究生的优势在于理论功底深厚, 思维具有穿透力,
    awk sed grep 常用命令
    如何删除文件中的空行
    Vim删除空行
    WPS 2010 页眉下方添加下划线
    Android开发环境搭建
  • 原文地址:https://www.cnblogs.com/del/p/1625626.html
Copyright © 2011-2022 走看看