这些基础结构有: 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; //获取起始点