本例效果圖:
代碼文件:unit Unit1;
窗體文件:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses GDIPOBJ, GDIPAPI, TypInfo;
var StartCap,EndCap,DashCap: Integer;
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
ComboBox1.Text := '虛線樣式';
ComboBox2.Text := '起點線帽';
ComboBox3.Text := '中間線帽';
ComboBox4.Text := '終點線帽';
for i := 0 to 5 do
ComboBox1.Items.Add(GetEnumName(TypeInfo(TDashStyle), i));
ComboBox2.Items.Add('LineCapFlat');
ComboBox2.Items.Add('LineCapSquare');
ComboBox2.Items.Add('LineCapRound');
ComboBox2.Items.Add('LineCapTriangle');
ComboBox2.Items.Add('LineCapNoAnchor');
ComboBox2.Items.Add('LineCapSquareAnchor');
ComboBox2.Items.Add('LineCapRoundAnchor');
ComboBox2.Items.Add('LineCapDiamondAnchor');
ComboBox2.Items.Add('LineCapArrowAnchor');
ComboBox3.Items := ComboBox2.Items;
ComboBox4.Items := ComboBox2.Items;
end;
procedure TForm1.FormPaint(Sender: TObject);
const
ColorArr: array[0..2] of TGPColor = (aclRed, aclGreen, aclBlue);
var
g: TGPGraphics;
p: TGPPen;
x1,x2,y: Integer;
i: Integer;
begin
g := TGPGraphics.Create(Canvas.Handle);
p := TGPPen.Create($FF000000, 16);
p.SetDashStyle(TDashStyle(ComboBox1.ItemIndex));
p.SetLineCap(StartCap, EndCap, DashCap);
x1 := 50;
x2 := ClIEntWidth - 50;
y := 60;
for i := 0 to 2 do
begin
p.SetColor(ColorArr[i]);
g.DrawLine(p, x1, y, x2, y);
Inc(y, 40);
end;
p.Free;
g.Free;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Repaint;
end;
procedure TForm1.ComboBox2Change(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) = ComboBox2 then StartCap := i;
if TComboBox(Sender) = ComboBox3 then DashCap := i;
if TComboBox(Sender) = ComboBox4 then EndCap := i;
Repaint;
end;
procedure TForm1.ComboBox3Change(Sender: TObject);
begin
ComboBox2Change(Sender);
end;
procedure TForm1.ComboBox4Change(Sender: TObject);
begin
ComboBox2Change(Sender);
end;
end.object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClIEntHeight = 165
ClIEntWidth = 515
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 = 121
Height = 21
ItemHeight = 13
TabOrder = 0
Text = 'ComboBox1'
OnChange = ComboBox1Change
end
object ComboBox2: TComboBox
Left = 135
Top = 8
Width = 121
Height = 21
ItemHeight = 13
TabOrder = 1
Text = 'ComboBox2'
OnChange = ComboBox2Change
end
object ComboBox3: TComboBox
Left = 262
Top = 8
Width = 121
Height = 21
ItemHeight = 13
TabOrder = 2
Text = 'ComboBox3'
OnChange = ComboBox3Change
end
object ComboBox4: TComboBox
Left = 389
Top = 8
Width = 121
Height = 21
ItemHeight = 13
TabOrder = 3
Text = 'ComboBox4'
OnChange = ComboBox4Change
end
end