按比例在FormResize上重新定位图像

Ste*_*eve 2 forms delphi scaling resize

我有一个带有TImages的Delphi表单.实际上,它是一个带有"图标"的"假"桌面(TImages).

当用户调整表单大小(例如,缩放或最大化表单)时,表单上的图标应按比例对齐.

现在,我正在用图像做这样的事情:

ImageX.Left:=Round(ImageX.Left * (Width / OldWidth));
ImageX.Top:=Round(ImageX.Top * (Height / OldHeight));
Run Code Online (Sandbox Code Playgroud)

现在这没关系,只要我开始使最大化的形式更小.

在这种情况下,最右边的图像部分地由表单的边框切割(它们离开表单的客户区域).

如果我重新定位这些图像以适合客户区域,那么在缩小到最大尺寸时图标的位置会变形.

任何更好的算法/修复的想法?

谢谢!

Sve*_*sli 5

首先,当您只移动图像时,您无法使用正确缩放的桌面,也不能缩放它们.您可以通过移动图像的中点而不是左上角来做得更好.它仍然不会是完美的,但它会更好.当然,现在图像将被四面切割,而不仅仅是底部和右边,但至少它将是对称的:-)

其次,由于您经常覆盖"原始"值(ImageX的顶部和左侧坐标),您将收到累积舍入误差.最好将原始值存储在某种集合或数组中,并根据原始值而不是之前的值设置新位置.

像这样的东西:

ImageX.Left:=Round(ImageX_OriginalLeft * (Width / Original_Width));
Run Code Online (Sandbox Code Playgroud)