【问题标题】:Embedding a VCL form in an FMX ScalingLayout在 FMX ScalingLayout 中嵌入 VCL 表单
【发布时间】:2014-09-20 08:04:24
【问题描述】:

我正在尝试在 FMX 表单中嵌入 VCL 表单,其中 FMX 表单包含设置为 alClient 的 TScalingLayout,以便在表单调整大小时缩放整个内容。

我首先发现将 VCL 表单嵌入 FMX 表单的唯一方法是这样的:

  VCLForm.ParentWindow := WindowHandleToPlatform(FMXForm.Handle).Wnd;
  VCLForm.Show;

不幸的是,这让我无法将 VCLForm 直接作为 TScalingLayout 的父级,因此当我调整 FMX 表单的大小时,嵌入的 VCL 表单自然不会缩放。

我认为如果我只能将 VCL 表单直接放在一个表单上,我可以使用另一个 FMX 表单作为容器并将这个容器表单嵌入到我的 ScalingLayout 中,但是因为我只能将 FMX 表单“嵌入”到另一个表单中通过移动它的所有孩子,我的 VCL 表单不会被移动。

有没有办法嵌入我的 VCL 表单,使其内容的缩放方式与缩放 ScalingLayout 上的所有 FMX 控件的方式相同?

【问题讨论】:

  • 你能通过 OnResize 事件手动调整 vcl 表单的大小吗?
  • 是的,我已经尝试过了,它工作正常,问题是 ScalingLayout 缩小了所有 FMX 内容(而不是例如当窗口变小时显示滚动条)。除了调整大小之外,我还必须对 VCL 表单上的内容这样做。

标签: delphi firemonkey vcl delphi-xe5


【解决方案1】:

不,这是不可能的。 Firemonkey 可以扩展其组件的原因是因为 Firemonkey 从头开始​​自己制作和绘制它们。

大多数 VCL 控件都是由程序调用的内置 Windows 操作系统组件构成的。而那些没有任何扩展能力。它们不是由 VCL 绘制的,VCL 告诉 Windows 绘制它们。因此,如果 FMX 不绘制它们,它就无法缩放它们。

【讨论】:

  • 这几乎不是真的。我可以使用 VCL 中的 Align 和 Anchors 属性来调整布局以适应表单的大小
  • 我认为他在谈论缩放按钮和文本的实际大小,这就是 TScaleLayout 所做的。锚点不会使实际文本缩小和扩大。
猜你喜欢
  • 2015-05-04
  • 1970-01-01
  • 2012-10-11
  • 2015-02-06
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 2016-08-03
相关资源
最近更新 更多