在delphi Form窗体的panel 中嵌入 Fmx窗体

该博客介绍了如何在Delphi的Windows应用程序中嵌入FireMonkey (Fmx) 窗体。首先创建一个Windows应用程序和一个Fmx的multi-device Form工程。然后调整Windows应用界面,使用Panel来承载Fmx窗体。在代码中,通过设置Fmx窗体的样式和父窗口,实现在Panel中的显示,并在窗体大小改变时调整Fmx窗体的大小。最后展示了运行效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建2个工程,一个是window application ,一个bpl 工程(multi-device Forml),创建方式见:

在delphi Form窗体调用Fmx窗体_zjg076000的博客-CSDN博客(这里不再重复)

2.调整一下windows应用的界面,放入panel 来嵌入fmx窗体

3.编写代码

 

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,testfmxform, Vcl.ExtCtrls;

type
  TForm2 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Panel2: TPanel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private

  public
       FmxForm: Tfrmtestfrmform;
      FMHWnd: HWND;
  end;

var
  Form2: TForm2;

implementation
    uses FMX.Platform.Win,FMX.Forms;
{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
     frmtestfrmform:=tfrmtestfrmform.Create(self);
     frmtestfrmform.ShowModal;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin

  FmxForm := Tfrmtestfrmform.Create(panel2);
  FmxForm.Left :=0;
  FmxForm.Top := 0;
  FMHWnd := FmxHandleToHWND(FmxForm.Handle);

 SetWindowLong(FMHWnd, GWL_STYLE, GetWindowLong(FMHwnd, GWL_STYLE) or WS_CHILD);

   Winapi.Windows.SetParent(WindowHandleToPlatform(FmxForm.Handle).Wnd, Panel2.Handle);
   MoveWindow(WindowHandleToPlatform(FmxForm.Handle).Wnd, 0, 0, Round(Panel2.Width), Round(Panel2.Height), True);

   FmxForm.WindowState := wsMaximized;
   FmxForm.Show;
   FmxForm.EndUpdate;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   FmxForm.Close;
end;

procedure TForm2.FormResize(Sender: TObject);
begin
     if FmxForm <> nil then
      MoveWindow(WindowHandleToPlatform(FmxForm.Handle).Wnd, 0, 0, Round(Panel2.Width), Round(Panel2.Height), True);
end;

end.

 4.运行效果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值