这些基础结构有: TGPSize、TGPSizeF、TGPPoint、TGPPointF、TGPRect、TGPRectF.
它们自身提供了一些方便的功能, 如果早看看的话前面的很多代码能更精简些.
TGPPoint 或 TGPPointF 方便的功能:
1、因为已经重载了 Add、Subtract 运算符, 所以 "点" 可以 + 或 -;
2、可使用 Equals 函数对比是否一致.
var Pt1,Pt2,Pt3: TGPPoint; b: Boolean; begin Pt1.Initialize(30, 30); Pt2.Initialize(20, 20); { Add } Pt3 := Pt1 + Pt2; ShowMessageFmt('%d, %d', [Pt3.X, Pt3.Y]); { 50, 50} { Subtract } Pt3 := Pt1 - Pt2; ShowMessageFmt('%d, %d', [Pt3.X, Pt3.Y]); { 10, 10 } { Equals } b := Pt1.Equals(TGPPoint.Create(30, 30)); ShowMessage(BoolToStr(b, True)); { True } end;
TGPSize 或 TGPSizeF 在 TGPPoint 的基础上, 增加了一个判断是否为空的 Empty 函数.
var Size1, Size2, Size3: TGPSize; begin Size1.Initialize(10, 10); Size2.Initialize(10, 10); Size3 := Size1 + Size2; ShowMessage(BoolToStr(Size3.Empty, True)); { False } Size3 := Size1 - Size2; ShowMessage(BoolToStr(Size3.Empty, True)); { True } end;
TGPRect 和 TGPRectF 的功能更多, 容易忽视的有:
TGPRect.Create(TRect); //可通过 TRect 建立 Rect.InitializeFromLTRB(); //可根据两个点初始化 Rect.IsEmptyArea; //可判断矩形区域是否真实存在 Rect.Clone; //可复制 Rect.Contains(); //可判断是否包含一个点或另一个矩形 Rect.Equals(); //是否相等 Rect.IntersectsWith(); //是否相交 Rect.Inflate(); //改变大小 Rect.Offset(); //移动矩形 Rect.Intersect(); //产生相交的矩形 Rect.Union(); //产生联合的矩形 Rect.Location; //获取起始点