VCL+FMX 双剑合壁编程

【特别感谢】猫叔捐助SSD硬盘

VCL 是经典,FMX 是新生,新生事物总会带来一些好玩新奇的东西。舍弃经典是浪费,不了解新生事物是等死,那么我们来一个二合一双剑合壁又如何呢?

要双剑合壁,就得投些机,取些巧。由于 Delphi / C++ Builder 不支持直接创建一个 VCL+FMX 的合体应用,所以我们要分别创建一个 VCL 和 FMX 的应用程序,其中一个我们做为主窗口。

好了, 我们先创建一个新的 VCL 工程,命名为 vclprj,然后在其上放置一个按钮,效果如下:

vclmain

接下来,我们再添加个空白的 FMX 工程,命名为 fmxprj,然后,我们在新打开的 FMX 窗体上随便放点啥,这里我放了一个 TLabel,然后旋转了45°,然后随便添加了一个TFloatAnimation。效果如下(这个窗体名字为 Form4):

fmxmain

好了,我们切回 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,点击按钮看看:

vclfmx

怎么样,效果还是蛮炫的吧。

【补充】不得闲发现一个组件可以直接将 FMX 的窗体套到 VCL 窗体上,具体效果请自行测试,俺没实验:TFireMonkeyContainer – a VCL control for mixing VCL and FMX,它的源码我已经下载分享给大家:百度网盘

 

分享到: