通过路径的 Flatten 方法可以把路径中的曲线拉直, 拉直到什么程度是由它的第二个参数(默认0.25)决定的; 它的第一个参数又是一个矩阵变换, 也就是说 Flatten 可以同时进行矩阵变换, 本例没有测试它, 其详情参见:
http://www.cnblogs.com/del/archive/2008/06/20/1226293.html
本例效果图:
![](https://www.cnblogs.com/images/cnblogs_com/del/138617/o_86202.gif)
代码文件:
http://www.cnblogs.com/del/archive/2008/06/20/1226293.html
本例效果图:
![](https://www.cnblogs.com/images/cnblogs_com/del/138617/o_86202.gif)
代码文件:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls; type TForm1 = class(TForm) TrackBar1: TTrackBar; procedure FormPaint(Sender: TObject); procedure FormCreate(Sender: TObject); procedure TrackBar1Change(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses GDIPOBJ, GDIPAPI; procedure TForm1.FormCreate(Sender: TObject); begin TrackBar1.Height := 23; TrackBar1.ShowSelRange := False; TrackBar1.Min := -5000; TrackBar1.Max := 5000; TrackBar1.Position := 25; TrackBar1.PageSize := 5; end; procedure TForm1.FormPaint(Sender: TObject); var g: TGPGraphics; p: TGPPen; path: TGPGraphicsPath; f: Single; begin g := TGPGraphics.Create(Canvas.Handle); p := TGPPen.Create(aclBlue, 2); path := TGPGraphicsPath.Create; path.AddEllipse(20, 20, ClientWidth-40, ClientHeight- 80); f := TrackBar1.Position / 100; path.Flatten(nil, f); Text := Format('%f', [f]); g.DrawPath(p, path); path.Free; p.Free; g.Free; end; procedure TForm1.TrackBar1Change(Sender: TObject); begin Repaint; end; end.窗体文件:
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 200 ClientWidth = 264 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 TrackBar1: TTrackBar Left = 0 Top = 176 Width = 265 Height = 45 TabOrder = 0 OnChange = TrackBar1Change end end