TGPRegion 表示任意形狀的二維區域,支援布林運算 (Union/Intersect/Complement/Xor) 以及作為剪裁區域限制繪圖範圍。本文示範四大用法:矩形建立、路徑建立、區域聯集、剪裁畫布。
var
g: TGPGraphics;
sb: TGPSolidBrush;
region: TGPRegion;
begin
g := TGPGraphics.Create(Canvas.Handle);
sb := TGPSolidBrush.Create(aclGold);
region := TGPRegion.Create(MakeRect(50, 50, 150, 150));
g.FillRegion(sb, region);
sb.Free; region.Free; g.Free;
end;
var
g: TGPGraphics;
path: TGPGraphicsPath;
region: TGPRegion;
sb: TGPSolidBrush;
const
pts: array[0..3] of TGPPoint = ((X:10;Y:10),(X:150;Y:10),(X:100;Y:75),(X:100;Y:150));
begin
g := TGPGraphics.Create(Canvas.Handle);
sb := TGPSolidBrush.Create(aclRed);
path := TGPGraphicsPath.Create;
path.AddPolygon(PGPPoint(@pts), Length(pts));
region := TGPRegion.Create(path);
g.FillRegion(sb, region);
g.Free; path.Free; region.Free; sb.Free;
end;
var
g: TGPGraphics;
sb: TGPSolidBrush;
region: TGPRegion;
begin
g := TGPGraphics.Create(Canvas.Handle);
sb := TGPSolidBrush.Create(aclYellowGreen);
region := TGPRegion.Create(MakeRect(50, 0, 50, 150)); // 垂直長方形
region.Union(MakeRect(0, 50, 150, 50)); // 聯集水平長方形
g.FillRegion(sb, region);
sb.Free; region.Free; g.Free;
end;
var
g: TGPGraphics;
sb: TGPSolidBrush;
p: TGPPen;
region: TGPRegion;
font: TGPFont;
begin
g := TGPGraphics.Create(Canvas.Handle);
sb := TGPSolidBrush.Create(aclYellowGreen);
p := TGPPen.Create(aclRed);
font := TGPFont.Create('宋體', 12);
region := TGPRegion.Create(MakeRect(50, 0, 50, 150));
region.Union(MakeRect(0, 50, 150, 50));
g.FillRegion(sb, region);
g.SetClip(region); // 設定剪裁區域
g.DrawLine(p, 0, 0, 100, 100); // 僅顯示十字區域內的線段
sb.SetColor(aclBlack);
g.DrawString('萬一萬一萬一', -1, font, MakePoint(20.0, 20.0), sb); // 文字亦受剪裁
sb.Free; p.Free; region.Free; font.Free; g.Free;
end;
Intersect:交集Complement:補集 (從區域減去引數)Xor:對稱差集Exclude:排除 (同 Complement)IsVisible:點/矩形是否在區域內區域運算是複雜 UI 裁剪、非矩形視窗、點擊測試的核心工具。