在 FMX 中将 TRect 转换为 TRectF
Convert TRect to TRectF in FMX
我正在尝试在 FMX.Forms
中使用 SetBounds()
的重载函数,将 Screen.Displays[index].BoundsRect
作为参数传递。但是,由于 Delphi 11 BoundsRect
似乎 return 一个 TRectF
而不是 TRect
.
我正在寻找一种方法将此 TRectF
转换为 TRect
,以便我可以将其传递给 SetBounds()
。
TRect
和 TRectF
之间的唯一区别是 TRect
将其坐标存储为整数值,而 TRectF
将其坐标存储为浮点值。因此,您所要做的就是通过执行以下操作将存储在 TRectF
中的浮点值转换为整数:
Rect.Left := Round(RectF.Left);
Rect.Right := Round(RectF.Right);
Rect.Top := Round(RectF.Top);
Rect.Bottom := Round(RectF.Bottom);
注意:根据您的情况,您可能希望使用 System.Math
单元中可用的其他两种舍入方法:Floor()
或 Ceil()
。
(and 解释了如何将 TRectF
转换为 TRect
以便您可以将其与 TForm.SetBounds()
方法(或 TForm.Bounds
属性).
我只想提一下,随着 TDisplay.BoundsRect
从 TRect
更改为 TRectF
,Delphi 11 还引入了一个新的 TForm.SetBoundsF()
method, and a new TForm.BoundsF
属性,两者都通过 TRectF
获取浮点坐标,而不是通过 TRect
.
获取整数坐标
因此,您根本不需要将坐标从浮点数转换为整数。您只需要更新您的代码逻辑以调用不同的 method/property,例如:
D11 之前:
MyForm.Bounds := Screen.Displays[index].BoundsRect;
or
MyForm.SetBounds(Screen.Displays[index].BoundsRect);
Post-D11:
MyForm.BoundsF := Screen.Displays[index].BoundsRect;
or
MyForm.SetBoundsF(Screen.Displays[index].BoundsRect);
我正在尝试在 FMX.Forms
中使用 SetBounds()
的重载函数,将 Screen.Displays[index].BoundsRect
作为参数传递。但是,由于 Delphi 11 BoundsRect
似乎 return 一个 TRectF
而不是 TRect
.
我正在寻找一种方法将此 TRectF
转换为 TRect
,以便我可以将其传递给 SetBounds()
。
TRect
和 TRectF
之间的唯一区别是 TRect
将其坐标存储为整数值,而 TRectF
将其坐标存储为浮点值。因此,您所要做的就是通过执行以下操作将存储在 TRectF
中的浮点值转换为整数:
Rect.Left := Round(RectF.Left);
Rect.Right := Round(RectF.Right);
Rect.Top := Round(RectF.Top);
Rect.Bottom := Round(RectF.Bottom);
注意:根据您的情况,您可能希望使用 System.Math
单元中可用的其他两种舍入方法:Floor()
或 Ceil()
。
TRectF
转换为 TRect
以便您可以将其与 TForm.SetBounds()
方法(或 TForm.Bounds
属性).
我只想提一下,随着 TDisplay.BoundsRect
从 TRect
更改为 TRectF
,Delphi 11 还引入了一个新的 TForm.SetBoundsF()
method, and a new TForm.BoundsF
属性,两者都通过 TRectF
获取浮点坐标,而不是通过 TRect
.
因此,您根本不需要将坐标从浮点数转换为整数。您只需要更新您的代码逻辑以调用不同的 method/property,例如:
D11 之前:
MyForm.Bounds := Screen.Displays[index].BoundsRect;
or
MyForm.SetBounds(Screen.Displays[index].BoundsRect);
Post-D11:
MyForm.BoundsF := Screen.Displays[index].BoundsRect;
or
MyForm.SetBoundsF(Screen.Displays[index].BoundsRect);