【问题标题】:Anchoring GUI components in FireMonkey在 FireMonkey 中锚定 GUI 组件
【发布时间】:2011-09-02 15:22:51
【问题描述】:

刚开始测试 FireMonkey,但找不到制作动态大小/定位组件的方法。

VCL 有 Anchor 属性,FM 没有。

有人看到我错过的东西

更新:

简单的锚定在 FM 中不可用。您必须创建 TLayouts 并对齐它们,然后将控件放在面板内以使其“粘贴”。如果您使用旧版本的 Builder 或 Delphi,这将与我们过去使用 TPanel 的方式相同。

【问题讨论】:

  • FMX.Types.TControl.Anchors,但它是私有的,因此不可用。
  • 您可能想查看 TLayout 组件。看起来您将它放在表单上,​​对其进行配置,然后将一些组件放入其中......不过只是猜测。
  • @Bob:对齐与锚定不同。
  • @Gregor:完全正确。锚定对大多数用途都很有意义。那个可以做动画等很好,但并不总是需要或想要那个。锚会很好。

标签: delphi c++builder delphi-xe2 firemonkey c++builder-xe2


【解决方案1】:

这是您问题的答案。 VCL 中的 anchors 属性显然已被 Margins 和 Padding 取代(出于性能考虑),我在 XE2 wiki (http://docwiki.embarcadero.com/RADStudio/en/FireMonkey_Application_Design) 上找到了一些文档。我怀疑是否会在以后放置锚。要在右侧表单底部锚定两个按钮(确定和取消),请执行以下操作。有关确定和取消按钮,请参见下图。

在表格底部放置一个小面板,大约 40 高。设置底部面板上的“边距”以创建一个较小的空间来放置按钮,确保将按钮对齐设置为 alRight。例如,窗体的右边缘和最右边的按钮之间的间距为 15。顶部和底部的边距设置为 12。这锚定了最右边的按钮。

'Padding' 与边距相反,填充将空间放在控件之外。在最右边的按钮上,我在 left 边添加了一个 20 的填充,这将是两个按钮之间的空间。对于第一个左侧的第二个按钮,我们只需将 align 属性设置为 alRight,无需调整 padding 或 margin。

【讨论】:

  • 我很想看图,但是图太小了,能发个大一点的吗?
  • 我想知道是不是太小了。我刚刚加入了一个更大的版本。
【解决方案2】:

在表单上放置多个 TLayout 组件并根据需要配置它们的对齐属性。将其他组件放入这些布局中,并相对于它们所在的 TLayout 设置它们的对齐属性。似乎对我有用...

【讨论】:

  • 用于组件对齐,而不是组件锚定。例如,如果我需要“确定”按钮保持相同的大小,但要遵循右下角的窗口大小调整。对齐不会那样做。
  • @Gregor 也许我只是不明白...如果我在表单上放置一个 TLayout 并将它的对齐设置为 alBottom 将一个 TButton 放到 TLayout 上并将它的对齐设置为 alRight 它遵循表单的大小调整得很好。
  • 这似乎可行,但让 GUI 设计变得痛苦。简单的锚定不再可用,现在我必须创建 TLAyouts。这就像过去使用 TPanel 让事情留在你想要的地方一样。欢迎来到 1990
  • @Gregor- 简单的锚定可能无法很好地配合这个新 FireMonkey 框架的缩放、动画和 3D 功能......
  • @Bob A:为什么不呢?很明显有些效果不应该结合,所以锚定不应该和运动动画结合。这是常识,IMO。
【解决方案3】:

这就是您要寻找的答案:FMX 控件没有锚点。

我想这将是“下一个版本”的功能。

【讨论】:

  • 那种东西让 Firemonkey 毫无用处。不,我会改写,它使 Firemonkey 无用。
  • ((:他们在——我喜欢称之为——“猴子生意——火猴”
  • 这不是真的,请使用边距和填充,它在 wiki 文档中进行了解释。没有锚那么明显,但它们有效。请参阅下面的答案。
  • 正确,不是没用,只是更难
【解决方案4】:

快速浏览一下 align 属性会发现比以前的 Delphi 版本更多的选择:

这不能解决您的问题(至少部分解决)。
我记得很长一段时间都只是使用嵌套的panels 和align 来布局东西。

【讨论】:

  • 这不是一个巨大的倒退。我必须嵌套 TLayouts 才能锚定。如果我从我的 Builder 中回忆 5 天,那对 *ss 来说是一个巨大的痛苦
  • 是的,但至少这不会让 Firemonkey 无用,这只是意味着还有改进的余地。每个人都在尖叫着发布所有承诺的功能。它甚至在文件中(见http://docwiki.embarcadero.com/VCL/XE2/en/FMX.Types.TControl.Anchors,但我猜他们还没有解决所有的错误,所以他们已经将这些锚设为私有。随着时间的推移,一切都会好起来的。我为这个机会感到高兴为 iOS 编写(没有调整大小:-)。
  • “这不是一个巨大的倒退吗”......哦,很常见 - 如果您还没有准备好接受新事物,请继续使用 VCL。 Firemonkey 中有很多很棒的东西,这是它的第一个版本......当然还有一些问题......远非无用恕我直言
【解决方案5】:

您可以使用 LiveBindings 和表达式来根据父控件设置控件的属性,但工作量很大。

否则,请使用边距和填充(如 HTML/CSS)。

【讨论】:

    猜你喜欢
    • 2015-09-12
    • 2017-05-10
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多