首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

GDI+路径保存线帽有关问题

2012-03-30 
GDI+路径保存线帽问题最近在研究GDI+,发现用路径保存线的时候,直线是可以保存,但是线帽保存不了,请问大家

GDI+路径保存线帽问题
最近在研究GDI+,发现用路径保存线的时候,直线是可以保存,但是线帽保存不了,请问大家有什么解决方法吗?
我的代码如下

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, RzPanel, StdCtrls, GDIPOBJ, GDIPAPI;

type
  TForm1 = class(TForm)
  RzPanel1: TRzPanel;
  RzPanel2: TRzPanel;
  ScrollBox1: TScrollBox;
  RadioGroup1: TRadioGroup;
  procedure FormCreate(Sender: TObject);
  procedure ScrollBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  procedure ScrollBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  procedure FormPaint(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;
  x1, y1: Integer;
  g: TGPGraphics;
  p: TGPPen;
  path: TGPGraphicsPath;


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Self.Position := PoDesktopCenter;
  g := TGPGraphics.Create(GetDC(ScrollBox1.Handle));
  p := TGPPen.Create(aclRed, 10);
  g.SetSmoothingMode(SmoothingModeHighQuality);
  p.SetStartCap(LineCapAnchorMask);
  p.SetEndCap(LineCapArrowAnchor);
  path := TGPGraphicsPath.Create;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  g.DrawPath(p, path);
end;

procedure TForm1.ScrollBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  x1 := x;
  y1 := y;
end;

procedure TForm1.ScrollBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  g.DrawLine(p, x1, y1, x, y);
  path.StartFigure;
  path.AddLine(MakePoint(x1, y1), MakePoint(x, y));
  path.CloseFigure;
end;


[解决办法]
http://www.cnblogs.com/keyvip/archive/2010/10/10/1847283.html
[code=Delphi(Pascal])//线帽
var
g: TGPGraphics;
p: TGPPen;
begin
g := TGPGraphics.Create(Canvas.Handle);
p:= TGPPen.Create(aclBlue, 5);

p.SetStartCap(LineCapArrowAnchor); {起点线帽,这里是箭头状锚头帽}
p.SetEndCap(LineCapRoundAnchor);  {终点线帽,这里是圆形锚头帽}
g.DrawLine(p, 20, 20, 220, 100);

p.Free;
g.Free;
end;[/code]

热点排行