TRectD = record
function IsEmpty: Boolean;
//Normalize: Returns True if either Top & Bottom or Left & Right are swappped
function Normalize: Boolean;
function Contains(const pt: TPoint): Boolean; overload;
function Contains(const pt: TPointD): Boolean; overload;
case integer of
  0: (Left, Top, Right, Bottom: double);
  1: (TopLeft, BottomRight: TPointD);

For Delphi compilers that don't support record methods (ie compilers prior to D2006), this structure is defined as an old style object instead of a record.