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

时间:2010-10-01 18:08:06

标签: delphi forms scaling resize

我有一个带有TImages的Delphi表单。实际上,它是一个带有“图标”的“虚假”桌面(TImages)。

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

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

ImageX.Left:=Round(ImageX.Left * (Width / OldWidth));
ImageX.Top:=Round(ImageX.Top * (Height / OldHeight));

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

在这种情况下,最右边的图像部分由表格的边框切割(它们不在表格的客户区域内)。

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

有关更好的算法/修复的想法吗?

谢谢!

1 个答案:

答案 0 :(得分:5)

首先,当您移动图像时,您无法拥有正确缩放的桌面,也不能缩放它们。移动图像的中点可以做得稍微好一些,而不是左上角。它仍然不会是完美的,但它会更好。当然,现在所有四个侧面都会裁剪图像,而不仅仅是底部和右侧,但至少它是对称的: - )

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

这样的事情:

ImageX.Left:=Round(ImageX_OriginalLeft * (Width / Original_Width));