这是完全可能的,因为 FMX 表单可以分配给面板。
有关详细信息,请参阅此博客文章:
只需创建一个新的 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;