在Delphi XE2之前,我们只使用VCL来创建GUI应用程序。 Delphi XE2声明:
警告:FireMonkey(FMX)和可视组件库(VCL)是 不兼容,不能在同一个项目中使用或 应用。也就是说,申请必须是一个或一个 另外,FireMonkey或VCL。不兼容性是由 FireMonkey(FMX)和VCL之间的框架差异。
我的应用程序是一个使用运行时包构建的纯VCL应用程序。所有VCL表单都存储在运行时包中。如果我要创建一个FireMonkey表单并存储在一个包中,我是否有机会在运行时在我的VCL应用程序中实例化这个FireMonkey表单?所以我可能会喜欢FireMonkey的3D或HD效果。
答案 0 :(得分:25)
这是完全可能的,因为可以将FMX表格分配给面板。
有关详细信息,请参阅this blog article:
只需创建一个新的FireMonkey表单(2D或3D,无关紧要)保存即可 然后将其添加到您的VCL应用程序(只需接受警告)。您 可以在某处创建你的FMX表单实例并只显示它 - 不 问题。但是,如果你想创建一些很好的控件怎么办? 动画或其他内容并将其嵌入您现有的VCL表单中? 好吧,在你的VCL表格上放一个TPanel并加入全新的单位 在Vcl.ExtCtrls之后DSharp.Windows.FMXAdapter.pas。然后创建 您的FMX表单在某处并将其分配给您的新的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;
答案 1 :(得分:6)
对于更现代的方法,请尝试TFireMonkeyContainer
。它是一个开源的VCL组件,可以放在VCL表单上,它可以在其中托管/嵌入FireMonkey表单。
使用TFireMonkeyContainer嵌入VCL表单的FMX表单
此处的详细信息:introduction article和followup with some bugfixes and more features。找到Google Code page and source here的链接。
适用于XE2及以上版本,包括XE4 +(其中FMX有一些大的变化。)
免责声明:这是我的组件。 (我创造它来解决这个问题 问题。)它是MPL许可的,因此即使在商业应用程序中也可以自由使用。希望它能帮助你,让你的生活更轻松!
答案 2 :(得分:3)
我没有尝试过,但我知道有一种确认方法可以使用RemObjects Hydra在同一个应用程序中混合使用VCL和FireMonkey,还有一个未经证实的报告,您可以在{{3}的VCL应用程序中使用FireMonkey表单}。
答案 3 :(得分:3)
实际上,使用两种形式并不重要。但请确保您在没有任何所有者的情况下实例化它们,因为所有者类型不兼容。
我刚刚创建了两个简单的测试项目,Project46和Project47。 Project46包含第25单元,其中包含VCL表格。项目47包含具有FMX形式的Unit26。在Form25上,我添加了一个按钮,其中包含OnClick处理程序:
procedure TForm25.Button1Click(Sender: TObject);
var
F: Unit26.TForm26;
begin
F := TForm26.Create(nil);
try
F.ShowModal;
finally
F.Free;
end;
end;
这按预期工作。但是,这些形式应该严格地彼此独立。只能交换它们共有的类型。
答案 4 :(得分:1)
下载并安装MonkeyMixer。加载您的VCL项目(或创建一个新项目),在Project Explorer中右键单击它,然后您将看到"切换到FireMonkey"。单击该按钮,您就可以将FireMonkey表单无缝添加到您的VCL项目中。然后您可以以相同的方式切换回VCL模式(如果您想要添加VCL表格/框架),除了菜单条目将说“"切换到VCL"。
享受!
答案 5 :(得分:0)
可以在WinAPI级别解决FMX + VCL混音的所有问题。但我个人不建议你在现实世界的应用程序中使用这种混合。