【特别感谢】猫叔捐助SSD硬盘
VCL 是经典,FMX 是新生,新生事物总会带来一些好玩新奇的东西。舍弃经典是浪费,不了解新生事物是等死,那么我们来一个二合一双剑合壁又如何呢?
要双剑合壁,就得投些机,取些巧。由于 Delphi / C++ Builder 不支持直接创建一个 VCL+FMX 的合体应用,所以我们要分别创建一个 VCL 和 FMX 的应用程序,其中一个我们做为主窗口。
好了, 我们先创建一个新的 VCL 工程,命名为 vclprj,然后在其上放置一个按钮,效果如下:
接下来,我们再添加个空白的 FMX 工程,命名为 fmxprj,然后,我们在新打开的 FMX 窗体上随便放点啥,这里我放了一个 TLabel,然后旋转了45°,然后随便添加了一个TFloatAnimation。效果如下(这个窗体名字为 Form4):
好了,我们切回 vclprj,然后双击按钮,然后在 implementation 部分写入 uses FMX窗体所在单元,我的是 unit4.pas,所以就是 uses unit4;
接下来就象正常的编码一样,直接创建窗体并显示出来就好了。
var FmxAppWnd:HWND=0; procedure HideFMXAppWnd; begin if FmxAppWnd=0 then FmxAppWnd:=Winapi.Windows.FindWindow('TFMAppClass',nil); if (FmxAppWnd<>0) and (Winapi.Windows.IsWindowVisible(FmxAppWnd)) then ShowWindow(FmxAppWnd,SW_HIDE); end; procedure TForm3.Button1Click(Sender: TObject); var F:TForm4; begin F:=TForm4.Create(nil); HideFMXAppWnd; F.ShowModal; F.DisposeOf; end;
好了,现在我们编译运行 vclprj,点击按钮看看:
怎么样,效果还是蛮炫的吧。
【补充】不得闲发现一个组件可以直接将 FMX 的窗体套到 VCL 窗体上,具体效果请自行测试,俺没实验:TFireMonkeyContainer – a VCL control for mixing VCL and FMX,它的源码我已经下载分享给大家:百度网盘