本例使用了六个元素的数组, 也就是表示虚线有三个线段和和三个间隔构成.
本例效果图:
代码文件:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls; type TForm1 = class(TForm) Panel1: TPanel; TrackBar1: TTrackBar; TrackBar2: TTrackBar; TrackBar3: TTrackBar; TrackBar4: TTrackBar; TrackBar5: TTrackBar; TrackBar6: 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); procedure TrackBar5Change(Sender: TObject); procedure TrackBar6Change(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses GDIPOBJ, GDIPAPI; var DashArr: array[0..5] of Single; procedure TForm1.FormCreate(Sender: TObject); const n = 100; begin TrackBar1.Max := n; TrackBar2.Max := n; TrackBar3.Max := n; TrackBar4.Max := n; TrackBar5.Max := n; TrackBar6.Max := n; TrackBar1.Position := n div 2; TrackBar2.Position := n div 2; TrackBar3.Position := n div 2; TrackBar4.Position := n div 2; TrackBar5.Position := n div 2; TrackBar6.Position := n div 2; end; procedure TForm1.FormPaint(Sender: TObject); var g: TGPGraphics; p: TGPPen; rect: TRect; begin g := TGPGraphics.Create(Canvas.Handle); p := TGPPen.Create(aclRed, 4); DashArr[0] := TrackBar1.Position / 10; DashArr[1] := TrackBar2.Position / 10; DashArr[2] := TrackBar3.Position / 10; DashArr[3] := TrackBar4.Position / 10; DashArr[4] := TrackBar5.Position / 10; DashArr[5] := TrackBar6.Position / 10; p.SetDashPattern(@DashArr, Length(DashArr)); {设置虚线} g.DrawLine(p, 0, 0, ClientWidth - Panel1.Width, ClientHeight); rect := Bounds(0, 0, ClientWidth - Panel1.Width, ClientHeight); InflateRect(rect, -30, -30); g.DrawEllipse(p, MakeRect(rect)); 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; procedure TForm1.TrackBar5Change(Sender: TObject); begin Repaint; end; procedure TForm1.TrackBar6Change(Sender: TObject); begin Repaint; end; end.窗体文件:
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 153 ClientWidth = 306 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 = 207 Top = 0 Width = 99 Height = 153 Align = alRight TabOrder = 0 ExplicitLeft = 200 ExplicitHeight = 205 object TrackBar1: TTrackBar Left = 0 Top = 8 Width = 97 Height = 20 ShowSelRange = False TabOrder = 0 OnChange = TrackBar1Change end object TrackBar2: TTrackBar Left = 0 Top = 31 Width = 97 Height = 20 ShowSelRange = False TabOrder = 1 OnChange = TrackBar2Change end object TrackBar3: TTrackBar Left = 0 Top = 55 Width = 97 Height = 20 ShowSelRange = False TabOrder = 2 OnChange = TrackBar3Change end object TrackBar4: TTrackBar Left = 0 Top = 79 Width = 97 Height = 20 ShowSelRange = False TabOrder = 3 OnChange = TrackBar4Change end object TrackBar5: TTrackBar Left = 0 Top = 103 Width = 97 Height = 20 ShowSelRange = False TabOrder = 4 OnChange = TrackBar5Change end object TrackBar6: TTrackBar Left = 0 Top = 127 Width = 97 Height = 20 ShowSelRange = False TabOrder = 5 OnChange = TrackBar6Change end end end