DrawLine 提供四種參數重載,支援整數/浮點座標與點結構體傳遞,是 GDI+ 最基礎的繪圖原語。理解重載差異有助於選擇最適合場景的調用方式。
g.DrawLine(p, x1, y1, x2, y2: Integer); { 整數座標 }
g.DrawLine(p, pt1, pt2: TGPPoint); { 整數點結構體 }
g.DrawLine(p, x1, y1, x2, y2: Single); { 浮點座標 }
g.DrawLine(p, pt1, pt2: TGPPointF); { 浮點點結構體 }
同一畫筆繪製四條線,分別展示四種重載:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses GDIPOBJ, GDIPAPI;
procedure TForm1.FormPaint(Sender: TObject);
var
g: TGPGraphics;
p: TGPPen;
begin
g := TGPGraphics.Create(Canvas.Handle);
p := TGPPen.Create(MakeColor(255, 0, 0), 2);
g.Clear(MakeColor(255, 255, 255));
g.DrawLine(p, 20, 40, 200, 40); { 整數座標 }
g.DrawLine(p, MakePoint(20, 60), MakePoint(200, 60)); { 整數點 }
g.DrawLine(p, 20.9, 80.0, 200.9, 80.0); { 浮點座標 }
g.DrawLine(p, MakePoint(20.9, 100.0), MakePoint(200.9, 100.0)); { 浮點點 }
g.Free;
p.Free;
end;
end.

| 場景 | 推薦重載 | 理由 |
|---|---|---|
| 固定座標常數 | 整數座標 | 代碼簡潔,無轉換開銷 |
| 變數座標計算 | 浮點座標 | 避免整數截斷誤差 |
| 點陣列操作 | 點結構體 | 語義清晰,便於陣列處理 |
| 高 DPI / 縮放 | 浮點點結構體 | 亞像素精度,配合 Matrix 變換 |
MakePoint / MakePointF 輔助函數可簡化結構體構建,建議統一使用。