Sozusagen sind das folgende 2 Typen zusammengefasst:
Delphi-Quellcode:
TRect1 = packed record
Left, Top, Right, Bottom: Longint;
end;
TRect2 = packed record
TopLeft, BottomRight: TPoint;
end;
Bei case of in einem Record wird jedoch der gleiche Speicherbereich verwendet.
Dh man hat sozusagen einen direkten Zugriff auf einen Cast der definierten Typen.
Hier noch ein Beispielcode zum testen:
Delphi-Quellcode:
type
TRect = packed record
case Integer of
0: (Left, Top, Right, Bottom: Longint);
1: (BottomRight, TopLeft: TPoint);
end;
var
rct: TRect;
begin
rct.Left := 0;
rct.Top := 1;
rct.Right := 2;
rct.Bottom := 3;
ShowMessage(
IntToStr(rct.TopLeft.X) + '/' + IntToStr(rct.TopLeft.Y) + sLineBreak +
IntToStr(rct.BottomRight.X) + '/' + IntToStr(rct.BottomRight.Y)
);