【问题标题】:Repositioning images on FormResize proportionally按比例重新定位 FormResize 上的图像
【发布时间】:2010-10-01 18:08:06
【问题描述】:

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

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

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

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

现在可以了,只要我开始使最大化的形式更小。

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

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

对更好的算法/修复有什么想法吗?

谢谢!

【问题讨论】:

  • 我认为您缺少发布有价值的信息来帮助您实现目标。例如,图标是按定义明确的行/列组织的,还是浮动在表单中的任何位置?是否要防止图标重叠?

标签: delphi forms scaling resize


【解决方案1】:

首先,当您只移动图像并且不缩放它们时,您无法拥有正确缩放的桌面。通过移动图像的中点而不是左上角,您可以做得更好。它仍然不会完美,但它会更好地工作。当然,现在图像将在所有 四个 侧被裁剪,不仅仅是底部和右侧,但至少它会是对称的 :-)

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

类似这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多