zoukankan      html  css  js  c++  java
  • 再学 GDI+[29]: TGPPen 自定义复合画笔 SetCompoundArray

    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        LabeledEdit1: TLabeledEdit;
        RadioGroup1: TRadioGroup;
        procedure FormCreate(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure RadioGroup1Click(Sender: TObject);
        procedure LabeledEdit1Change(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses GDIPOBJ, GDIPAPI;
    
    var
      arr1: array[0..5] of Single; {用于均分线复合画笔; 数组大小没有限制, 可用动态数组}
      arr2: array[0..3] of Single; {用于粗细线复合画笔; 数组大小没有限制, 可用动态数组}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      {均分线复合画笔; 6 个元素决定 3 条子线; 数组元素为百分比, 应在 0-1 之间}
      arr1[0] := 0.00; {第一线起点}
      arr1[1] := 0.10; {第一线终点}
      arr1[2] := 0.45; {第二线起点}
      arr1[3] := 0.55; {第二线终点}
      arr1[4] := 0.90; {第三线起点}
      arr1[5] := 1.00; {第三线终点}
    
      {粗细线复合画笔; 4 个元素决定 2 条子线; }
      arr2[0] := 0.00; {第一线起点}
      arr2[1] := 0.50; {第一线终点}
      arr2[2] := 0.90; {第二线起点}
      arr2[3] := 1.00; {第二线终点}
    
      LabeledEdit1.EditLabel.Caption := '笔宽';
      LabeledEdit1.Text := '10';
      RadioGroup1.Caption := '线型';
      RadioGroup1.Items.CommaText := '单实线,均分线,粗细线';
      RadioGroup1.ItemIndex := 0;
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      g: TGPGraphics;
      p: TGPPen;
      r: TRect;
    begin
      g := TGPGraphics.Create(Canvas.Handle);
      g.Clear($FFFFFFFF);
      p := TGPPen.Create(aclCoral);
    
      p.SetWidth(StrToFloatDef(LabeledEdit1.Text, 10));
    
      case RadioGroup1.ItemIndex of
        1: p.SetCompoundArray(@arr1, Length(arr1));
        2: p.SetCompoundArray(@arr2, Length(arr2));
      end;
    
      g.DrawLine(p, 0, 0, ClientWidth, ClientHeight);
      r := ClientRect;
      g.DrawEllipse(p, MakeRect(r));
      InflateRect(r, -ClientWidth div 4, -ClientHeight div 4);
      g.DrawLine(p, 0, 0, ClientWidth, ClientHeight);
      g.DrawRectangle(p, MakeRect(r));
    
      p.Free;
      g.Free;
    end;
    
    procedure TForm1.LabeledEdit1Change(Sender: TObject);
    begin
      Repaint;
    end;
    
    procedure TForm1.RadioGroup1Click(Sender: TObject);
    begin
      Repaint;
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 206
      ClientWidth = 339
      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 LabeledEdit1: TLabeledEdit
        Left = 264
        Top = 19
        Width = 67
        Height = 21
        EditLabel.Width = 61
        EditLabel.Height = 13
        EditLabel.Caption = 'LabeledEdit1'
        TabOrder = 0
        OnChange = LabeledEdit1Change
      end
      object RadioGroup1: TRadioGroup
        Left = 264
        Top = 46
        Width = 67
        Height = 66
        Caption = 'RadioGroup1'
        TabOrder = 1
        OnClick = RadioGroup1Click
      end
    end
    
  • 相关阅读:
    2019牛客暑期多校训练营(第六场)
    2019牛客暑期多校训练营(第五场)
    CCPC-Wannafly Summer Camp 2019 全记录
    2018CCPC吉林赛区 | 部分题解 (HDU6555 HDU6556 HDU6559 HDU6561)
    2006-2007 ACM-ICPC | POJ3380 POJ3384 POJ3385 水题题解
    数论专场 Day9 部分题解
    Catenyms (POJ2337) 字典序最小欧拉路
    2019暑训第一场训练赛 |(2016-icpc区域赛)部分题解
    哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)B 小乐乐搭积木 (状态压缩)
    牛客练习赛32B Xor Path (树形dp)
  • 原文地址:https://www.cnblogs.com/del/p/1219234.html
Copyright © 2011-2022 走看看