首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

GDI+ 畫筆進階屬性:寬度、顏色與線帽樣式完整指南

     編輯:Delphi

TGPPen 除了基本的顏色與寬度設定,還提供豐富的線帽 樣式,可為線條端點增添箭頭、圓角、方角、菱形等裝飾效果,大幅提升繪圖表現力。

核心屬性與方法

  • SetWidth(Single):設定線條寬度 (浮點數精度)
  • SetColor(TGPColor):設定線條顏色 (ARGB 格式)
  • SetStartCap / SetEndCap:分別設定起點與終點線帽樣式

線帽樣式常數對照表

常數值外觀說明
LineCapFlat0平直端點 (預設)
LineCapSquare1方形延伸端點
LineCapRound2圓形端點
LineCapTriangle3三角形端點
LineCapNoAnchor$10無錨點
LineCapSquareAnchor$11方形錨點
LineCapRoundAnchor$12圓形錨點
LineCapDiamondAnchor$13菱形錨點
LineCapArrowAnchor$14箭頭錨點
LineCapCustom$FF自訂線帽
LineCapAnchorMask$F0錨點檢查遮罩

程式碼實作

互動式範例:兩個下拉選單分別設定起點/終點線帽,軌跡條調整寬度,顏色按鈕選取顏色:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TeCanvas, ComCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    TrackBar1: TTrackBar;
    ButtonColor1: TButtonColor;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure ButtonColor1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
uses GDIPOBJ, GDIPAPI, TypInfo;

var
  StartCap, EndCap: Integer;
  LineWidth: Single = 2;
  LineColor: TGPColor = aclRed;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with ComboBox1.Items do
  begin
    Add('LineCapFlat');
    Add('LineCapSquare');
    Add('LineCapRound');
    Add('LineCapTriangle');
    Add('LineCapNoAnchor');
    Add('LineCapSquareAnchor');
    Add('LineCapRoundAnchor');
    Add('LineCapDiamondAnchor');
    Add('LineCapArrowAnchor');
    Add('LineCapCustom');
  end;
  ComboBox1.ItemIndex := 0;
  ComboBox2.Items := ComboBox1.Items;
  ComboBox2.ItemIndex := 0;
  TrackBar1.ShowSelRange := False;
  TrackBar1.Min := 1;
  TrackBar1.Max := 50;
  TrackBar1.Position := 2;
  ButtonColor1.SymbolColor := clRed;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
  p: TGPPen;
  x1, y1, x2, y2: Integer;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  p := TGPPen.Create(0);
  g.Clear(MakeColor(255, 255, 255));
  x1 := 50;
  x2 := ClientWidth - 50;
  y1 := ClientHeight div 2;
  y2 := y1;
  p.SetColor(LineColor);
  p.SetWidth(LineWidth);
  p.SetStartCap(StartCap);
  p.SetEndCap(EndCap);
  g.DrawLine(p, x1, y1, x2, y2);
  g.Free;
  p.Free;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  i: Integer;
begin
  i := 0;
  case TComboBox(Sender).ItemIndex of
    0: i := LineCapFlat;
    1: i := LineCapSquare;
    2: i := LineCapRound;
    3: i := LineCapTriangle;
    4: i := LineCapNoAnchor;
    5: i := LineCapSquareAnchor;
    6: i := LineCapRoundAnchor;
    7: i := LineCapDiamondAnchor;
    8: i := LineCapArrowAnchor;
    9: i := LineCapCustom;
    10: i := LineCapAnchorMask;
  end;
  if TComboBox(Sender) = ComboBox1 then StartCap := i;
  if TComboBox(Sender) = ComboBox2 then EndCap := i;
  Repaint;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
  ComboBox1Change(Sender);
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  LineWidth := TrackBar1.Position;
  Repaint;
end;

procedure TForm1.ButtonColor1Click(Sender: TObject);
begin
  LineColor := ColorRefToARGB(ButtonColor1.SymbolColor);
  Repaint;
end;

end.

表單設計 (DFM)

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 206
  ClientWidth = 315
  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 ComboBox1: TComboBox
    Left = 8
    Top = 8
    Width = 145
    Height = 21
    ItemHeight = 13
    TabOrder = 0
    Text = 'ComboBox1'
    OnChange = ComboBox1Change
  end
  object ComboBox2: TComboBox
    Left = 162
    Top = 8
    Width = 145
    Height = 21
    ItemHeight = 13
    TabOrder = 1
    Text = 'ComboBox2'
    OnChange = ComboBox2Change
  end
  object TrackBar1: TTrackBar
    Left = 3
    Top = 182
    Width = 223
    Height = 20
    TabOrder = 2
    OnChange = TrackBar1Change
  end
  object ButtonColor1: TButtonColor
    Left = 232
    Top = 177
    Caption = 'ButtonColor1'
    TabOrder = 3
    OnClick = ButtonColor1Click
  end
end

執行效果

畫筆屬性示範

即時調整線帽組合 (如起點箭頭 + 終點圓形)、線寬與顏色,觀察水平線的視覺變化。掌握這些屬性可繪製專業級流程圖、向量圖示等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved