Cha*_*ang 24 delphi vcl delphi-xe2 firemonkey
在Delphi XE2之前,我们只使用VCL来创建GUI应用程序.Delphi XE2声明:
警告:FireMonkey(FMX)和可视组件库(VCL)不兼容,不能在同一项目或应用程序中使用.也就是说,应用程序必须只有一个或另一个,FireMonkey或VCL.不兼容性是由FireMonkey(FMX)和VCL之间的框架差异引起的.
我的应用程序是一个使用运行时包构建的纯VCL应用程序.所有VCL表单都存储在运行时包中.如果我要创建一个FireMonkey表单并存储在一个包中,我是否有机会在运行时在我的VCL应用程序中实例化这个FireMonkey表单?所以我可能会喜欢FireMonkey的3D或HD效果.
Arn*_*hez 25
这是完全可能的,因为FMX表格可以分配给面板.
有关详情,请参阅此博客文章:
只需创建一个新的FireMonkey表单(2D或3D,无所谓)保存,然后将其添加到您的VCL应用程序(只需接受警告).您可以在某处创建FMX表单实例并显示它 - 没问题.但是如果你想用动画或其他东西创建一些不错的控件并将其嵌入到现有的VCL表单中呢?好吧,在您的VCL表单上添加TPanel,并在Vcl.ExtCtrls之后包含全新的单元 DSharp.Windows.FMXAdapter.pas.然后只需在某处创建您的FMX表单并将其分配给Panel的新Form属性 - 然后就可以了.
事实上,FMXAdapter.pas代码很短:
procedure TPanel.Resize;
begin
inherited;
ResizeForm();
end;
procedure TPanel.ResizeForm;
begin
if Assigned(FForm) then
Platform.SetWindowRect(FForm, RectF(BorderWidth, BorderWidth,
ClientWidth + BorderWidth, ClientHeight + BorderWidth));
end;
procedure TPanel.SetForm(const AForm: TCommonCustomForm);
begin
FForm := AForm;
FForm.BorderIcons := [];
FForm.BorderStyle := TFmxFormBorderStyle.bsNone;
ResizeForm();
FForm.Visible := True;
Winapi.Windows.SetParent(FmxHandleToHWND(FForm.Handle), Handle);
end;
Run Code Online (Sandbox Code Playgroud)
尝试更现代的方法TFireMonkeyContainer.它是一个开源的VCL组件,可以放在VCL表单上,它可以在其中托管/嵌入FireMonkey表单.

使用TFireMonkeyContainer以VCL格式嵌入的FMX表单
详细信息:介绍文章,以及一些错误修正和更多功能的后续内容.在此处找到Google代码页的链接和来源.
它适用于XE2及更高版本,包括XE4 +(其中FMX有一些大的变化.)
免责声明:这是我的组件.(我创建它来解决这个问题.)它是MPL许可的,因此即使在商业应用程序中也可以自由使用.希望它能帮助您,让您的生活更轻松!
我自己没有尝试过,但我知道一种使用RemObjects Hydra在同一应用程序中混合 VCL 和 FireMonkey 的已确认方法,以及一份未经证实的报告,您可以在Delphi Sorcery的 VCL 应用程序中使用 FireMonkey 表单。