几何变换也就是 Matrix 变换, 画笔的 Matrix 会忽略 dx、dy 平移参数; 选择 LineCapRound 线帽效果比较好.
本例效果图:
代码文件:
本例效果图:
代码文件:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Button1: TButton; TrackBar1: TTrackBar; TrackBar2: TTrackBar; TrackBar3: TTrackBar; TrackBar4: TTrackBar; procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure TrackBar1Change(Sender: TObject); procedure TrackBar2Change(Sender: TObject); procedure TrackBar3Change(Sender: TObject); procedure TrackBar4Change(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses GDIPOBJ, GDIPAPI; procedure TForm1.FormCreate(Sender: TObject); const n = 40; begin TrackBar1.Min := -n; TrackBar1.Max := n; TrackBar2.Min := -n; TrackBar2.Max := n; TrackBar3.Min := -n; TrackBar3.Max := n; TrackBar4.Min := -n; TrackBar4.Max := n; TrackBar1.Position := 10; TrackBar2.Position := 0; TrackBar3.Position := 0; TrackBar4.Position := 10; Button1.OnClick := FormCreate; end; procedure TForm1.FormPaint(Sender: TObject); var g: TGPGraphics; b: TGPBrush; p: TGPPen; matrix: TGPMatrix; m11, m12, m21, m22: Single; begin g := TGPGraphics.Create(Canvas.Handle); b := TGPHatchBrush.Create(HatchStyleLargeGrid, aclForestGreen); p := TGPPen.Create(b, 16); m11 := TrackBar1.Position / 10; m12 := TrackBar2.Position / 10; m21 := TrackBar3.Position / 10; m22 := TrackBar4.Position / 10; matrix := TGPMatrix.Create(m11, m12, m21, m22, 0, 0); p.SetTransform(matrix); p.SetStartCap(LineCapRound); p.SetEndCap(LineCapRound); g.DrawLine(p, 30, 30, ClientWidth - Panel1.Width - 30, ClientHeight - 30); matrix.Free; b.Free; p.Free; g.Free; end; procedure TForm1.TrackBar1Change(Sender: TObject); begin Repaint; end; procedure TForm1.TrackBar2Change(Sender: TObject); begin Repaint; end; procedure TForm1.TrackBar3Change(Sender: TObject); begin Repaint; end; procedure TForm1.TrackBar4Change(Sender: TObject); begin Repaint; end; end.窗体文件:
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 184 ClientWidth = 327 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 Panel1: TPanel Left = 228 Top = 0 Width = 99 Height = 184 Align = alRight TabOrder = 0 ExplicitLeft = 225 ExplicitHeight = 170 object Button1: TButton Left = 14 Top = 8 Width = 75 Height = 25 Caption = #21021#22987#21270 TabOrder = 0 end object TrackBar1: TTrackBar Left = 0 Top = 39 Width = 100 Height = 20 ShowSelRange = False TabOrder = 1 OnChange = TrackBar1Change end object TrackBar2: TTrackBar Left = 0 Top = 72 Width = 100 Height = 20 ShowSelRange = False TabOrder = 2 OnChange = TrackBar2Change end object TrackBar3: TTrackBar Left = 0 Top = 106 Width = 100 Height = 20 ShowSelRange = False TabOrder = 3 OnChange = TrackBar3Change end object TrackBar4: TTrackBar Left = 0 Top = 140 Width = 100 Height = 20 ShowSelRange = False TabOrder = 4 OnChange = TrackBar4Change end end end