Reord类型,看起来变成了Object,也可以写函数,偶的神啊,看看System.Types.pas里面的TRect:
TRect = record
private
function GetWidth: Integer;
procedure SetWidth(const Value: Integer);
function GetHeight: Integer;
procedure SetHeight(const Value: Integer);
function GetSize: TSize;
procedure SetSize(const Value: TSize);
function GetLocation: TPoint;
public
constructor Create(const Origin: TPoint); overload; // empty rect at given origin
constructor Create(const Origin: TPoint; Width, Height: Integer); overload; // at TPoint of origin with width and height
constructor Create(const Left, Top, Right, Bottom: Integer); overload; // at x, y with width and height
constructor Create(const P1, P2: TPoint; Normalize: Boolean = False); overload; // with corners specified by p1 and p2
constructor Create(const R: TRect; Normalize: Boolean = False); overload;
// operator overloads
class operator Equal(const Lhs, Rhs: TRect): Boolean;
class operator NotEqual(const Lhs, Rhs: TRect): Boolean;
// union of two rectangles
class operator Add(const Lhs, Rhs: TRect): TRect;
// intersection of two rectangles
class operator Multiply(const Lhs, Rhs: TRect): TRect;
class function Empty: TRect; inline; static;
//utility methods
//makes sure TopLeft is above and to the left of BottomRight
procedure NormalizeRect;
//returns true if left = right or top = bottom
function IsEmpty: Boolean;
//returns true if the point is inside the rect
function Contains(const Pt: TPoint): Boolean; overload;
// returns true if the rect encloses R completely
function Contains(const R: TRect): Boolean; overload;
// returns true if any part of the rect covers R
function IntersectsWith(const R: TRect): Boolean;
// computes an intersection of R1 and R2
class function Intersect(const R1: TRect; const R2: TRect): TRect; overload; static;
// replaces current rectangle with its intersection with R
procedure Intersect(const R: TRect); overload;
// computes a union of R1 and R2
class function Union(const R1: TRect; const R2: TRect): TRect; overload; static;
// replaces current rectangle with its union with R
procedure Union(const R: TRect); overload;
// creates a minimal rectangle that contains all points from array Points
class function Union(const Points: Array of TPoint): TRect; overload; static;
// offsets the rectangle origin relative to current position
procedure Offset(const DX, DY: Integer); overload;
procedure Offset(const Point: TPoint); overload;
// sets new origin
procedure SetLocation(const X, Y: Integer); overload;
procedure SetLocation(const Point: TPoint); overload;
// inflate by DX and DY
procedure Inflate(const DX, DY: Integer); overload;
// inflate in all directions
procedure Inflate(const DL, DT, DR, DB: Integer); overload;
//returns the center point of the rectangle;
function CenterPoint: TPoint;
function SplitRect(SplitType: TSplitRectType; Size: Integer): TRect; overload;
function SplitRect(SplitType: TSplitRectType; Percent: Double): TRect; overload;
// changing the width is always relative to Left;
property Width: Integer read GetWidth write SetWidth;
// changing the Height is always relative to Top
property Height: Integer read GetHeight write SetHeight;
property Size: TSize read GetSize write SetSize;
property Location: TPoint read GetLocation write SetLocation;
case Integer of
0: (Left, Top, Right, Bottom: Longint);
1: (TopLeft, BottomRight: TPoint);
end;
在对Record的访问上,如:
P:PPoint;
X:integer;
原来X:=P.X;可以,X:=P^.X;也可以(不太符合Pascal严谨的风格),现在也可以。但是其它地方有点变化:
PPointerList = ^TPointerList;
TPointerList = array of Pointer;
var
ASortList: PPointerList;
P, T: Pointer;
P := ASortList[1]; //这样写不行,必须改为P:=ASortList^[1];