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;
    
  • 相关阅读:
    图片下落效果
    处理springmvc的post和get提交参数乱码问题
    nginx 安装
    xml学习总结(二)
    xml学习总结(一)
    psp系统需求分析
    MySQL Workbench “Error Code: 1175”
    mysql 连接两列
    php UNIX时间戳转换为指定日期格式
    drupal错误: Maximum execution time of 240 seconds exceeded
  • 原文地址:https://www.cnblogs.com/del/p/1625626.html
Copyright © 2011-2022 走看看