• 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;
    
  • 相关阅读:
    【6】肿瘤胚系突变遗传分析及数据库使用
    【5】肿瘤DNA甲基化数据分析原理及流程
    【4】肿瘤转录组测序分析流程及相关软件
    【3】肿瘤基因组数据分析方法概述
    【2】肿瘤基因检测相关技术原理
    MySQL数据排序asc、desc
    python的数据类型
    Python minidom模块(DOM写入和解析XML)
    python基础----特性(property)、静态方法(staticmethod)、类方法(classmethod)、__str__的用法
    python os.path模块常用方法详解
  • 原文地址:https://www.cnblogs.com/del/p/1625626.html
Copyright © 2020-2023  润新知