• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi中DLL或Package窗体载入与显示

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Delphi应用程序架构中有一种模式,采用DLL或Package存储业务窗体,当需要时从其中载入到主程序中,这时候需要对DLL或Package中窗体进行处理,步骤如下:

1、定义窗体基类

type
  TfrmBase = class(TForm)
    Panel1: TPanel;
  private
    { Private declarations }
  protected
    procedure Loaded;override;
  public
    { Public declarations }
    procedure UpdateActions; override;
  end;

  TfrmBaseClass = class of TfrmBase;

implementation

{$R *.dfm}

{ TfrmBase }

procedure TfrmBase.Loaded;
begin
  inherited;
  //将窗体改变为嵌入化 
  align   :=   alClient;
  BorderStyle   :=   bsNone;
  BorderIcons   :=   [];
end;

procedure TfrmBase.UpdateActions;
begin
  inherited;
  //将方法Public化
end;
 

2、创建具体的实例窗体

TfrmDll = class(TfrmBase)

 

3、通过窗体数据窗体类

function GetDllFormClass : TfrmBaseClass;
begin
  Result := TfrmDll;
end;

exports
  GetDllFormClass;

 

4、主窗体中动态载入DLL和创建DLL中的窗体对象

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  if DllHandle > 0 then
    Exit;

  DllHandle := LoadLibrary('FormDll.dll');
  if DllHandle > 0 then
  begin
    GetDllFormClass := GetProcAddress(DllHandle, 'GetDllFormClass');
    ifAssigned(GetDllFormClass) then
    begin
      cfrm := GetDllformClass;
      vfrm := cfrm.Create(Application);      
      //设置窗体的Parent,通过ParentWindow方法实现,这点很重要
      vfrm.ParentWindow := TabSheet1.Handle;
    end;
  end;
end;

5、在主窗体上放置一个TApplicationEvents控件,在OnIdle事件中填写以下代码:

procedure TfrmMain.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
  //当系统空闲时,处理子窗体的ActionUpdate事件
  if Assigned(vfrm) then
    vfrm.UpdateActions;
end;

 

6、在OnMessage事件中填写以下代码:

procedure TfrmMain.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  //如果窗体变量存在,则需要对消息进行判断和处理,如果是窗体变量的消息,则不进一步处理
  if Assigned(vfrm) then
  begin
    if IsDialogMessage(vfrm.Handle, Msg) then
      Handled := true;
  end;
end;
 

至此完成。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DELPHI中引用sqlite3发布时间:2022-07-18
下一篇:
delphi获取网页所有链接并访问赚取金币发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap