我有一个带有TImages的Delphi表单。实际上,它是一个带有“图标”的“虚假”桌面(TImages)。
当用户调整表单大小(例如缩放或最大化表单)时,表单上的图标应按比例对齐。
现在,我正在用图像做这样的事情:
ImageX.Left:=Round(ImageX.Left * (Width / OldWidth));
ImageX.Top:=Round(ImageX.Top * (Height / OldHeight));
现在这没关系,只要我开始使最大化的形式更小。
在这种情况下,最右边的图像部分由表格的边框切割(它们不在表格的客户区域内)。
如果我重新定位这些图像以适合客户区域,那么在缩小到最大尺寸时图标的位置会失真。
有关更好的算法/修复的想法吗?
谢谢!
答案 0 :(得分:5)
首先,当您移动图像时,您无法拥有正确缩放的桌面,也不能缩放它们。移动图像的中点可以做得稍微好一些,而不是左上角。它仍然不会是完美的,但它会更好。当然,现在所有四个侧面都会裁剪图像,而不仅仅是底部和右侧,但至少它是对称的: - )
其次,由于您经常覆盖“原始”值(ImageX的顶部和左侧坐标),您将收到累积舍入错误。最好将原始值存储在某种集合或数组中,并根据原始值而不是之前的值设置新位置。
这样的事情:
ImageX.Left:=Round(ImageX_OriginalLeft * (Width / Original_Width));