• 再学 GDI+[52]: 路径 Reverse、Reset


    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        CheckBox1: TCheckBox;
        CheckBox2: TCheckBox;
        procedure FormCreate(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure CheckBox1Click(Sender: TObject);
        procedure CheckBox2Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses GDIPOBJ, GDIPAPI;
    
    var pts: array[0..6] of TGPPoint;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      pts[0].X := 10;  pts[0].Y := 50;
      pts[1].X := 40;  pts[1].Y := 90;
      pts[2].X := 80;  pts[2].Y := 10;
      pts[3].X := 110;  pts[3].Y := 50;
      pts[4].X := 140;  pts[4].Y := 10;
      pts[5].X := 180; pts[5].Y := 90;
      pts[6].X := 210; pts[6].Y := 50;
    
      CheckBox1.Caption := '翻转路径中的点';
      CheckBox2.Caption := '清空路径中的点';
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      g: TGPGraphics;
      p: TGPPen;
      path: TGPGraphicsPath;
      PathPts: array of TGPPoint;
      i: Integer;
    begin
      g := TGPGraphics.Create(Canvas.Handle);
      p := TGPPen.Create(aclRed, 2);
      path := TGPGraphicsPath.Create;
      path.AddBeziers(PGPPoint(@pts), Length(pts));
    
      if CheckBox1.Checked then path.Reverse;
      if CheckBox2.Checked then path.Reset;
      {Reset 时, 会清空 PathPoints 和 PathTypes 数组并将 FillMode 设置为 FillModeAlternate}
    
      SetLength(PathPts, path.GetPointCount);
      path.GetPathPoints(PGPPoint(PathPts), Length(PathPts));
    
      Canvas.Pen.Color := clGray;
      for i := Low(PathPts) to High(PathPts) do
        Canvas.TextOut(PathPts[i].X, PathPts[i].Y, IntToStr(i+1));
    
      g.DrawPath(p, path);
    
      path.Free;
      p.Free;
      g.Free;
    end;
    
    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
      Repaint;
    end;
    
    procedure TForm1.CheckBox2Click(Sender: TObject);
    begin
      Repaint;
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 156
      ClientWidth = 232
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poDesktopCenter
      OnCreate = FormCreate
      OnPaint = FormPaint
      PixelsPerInch = 96
      TextHeight = 13
      object CheckBox1: TCheckBox
        Left = 12
        Top = 126
        Width = 113
        Height = 17
        Caption = 'CheckBox1'
        TabOrder = 0
        OnClick = CheckBox1Click
      end
      object CheckBox2: TCheckBox
        Left = 123
        Top = 126
        Width = 106
        Height = 17
        Caption = 'CheckBox2'
        TabOrder = 1
        OnClick = CheckBox2Click
      end
    end
    
  • 相关阅读:
    cafebabe go入门练习003:常量与iota
    go入门练习002:查找重复的行
    go入门练习001:打印命令行输入
    go入门-002-程序结构
    [ES6深度解析]10:Generators 续集
    [JavaScript初级面试]17. 运行环境
    [JavaScript初级面试]16. 运行环境
    [JavaScript初级面试]10. WEB API
    [JavaScript初级面试]8. WEB API
    [JavaScript初级面试]7. WEB API
  • 原文地址:https://www.cnblogs.com/del/p/1226082.html
Copyright © 2020-2023  润新知