本例效果图:



代码文件:
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

posted on 2008-06-15 00:04  万一  阅读(2200)  评论(0编辑  收藏  举报