分享

Delphi 调用dll中的窗体

 工厂应用 2018-05-07

https://blog.csdn.net/opensource_liu/article/details/48002255

1.定义窗体

  1. unit UDllForm;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  7.   Dialogs, StdCtrls;  
  8.   
  9. type  
  10.   TDllForm = class(TForm)  
  11.     btn1: TButton;  
  12.     procedure btn1Click(Sender: TObject);  
  13.   private  
  14.     { Private declarations }  
  15.   public  
  16.     { Public declarations }  
  17.   end;  
  18.   
  19. var  
  20.   DllForm: TDllForm;  
  21.   procedure ShowDllFormInPanel(Parent:THandle);stdcall;  
  22.   procedure ShowDllForm;stdcall;  
  23. implementation  
  24.   
  25. procedure ShowDllFormInPanel(Parent:THandle);stdcall;  
  26. begin  
  27.   Application.handle:=parent;  
  28.   if DllForm = nil then  
  29.     DllForm:= TDllForm.Create(Application);  
  30.   DllForm.ParentWindow:=Parent;//将容器设置为父窗口  
  31.   DllForm.Show;  
  32. end;  
  33.   
  34. procedure ShowDllForm;stdcall;  
  35. begin  
  36.   if DllForm = nil then  
  37.     DllForm:= TDllForm.Create(Application);  
  38.   DllForm.Show;  
  39. end;  
  40.   
  41. {$R *.dfm}  
  42.   
  43. procedure TDllForm.btn1Click(Sender: TObject);  
  44. begin  
  45.   ShowMessage('HELLO');  
  46. end;  
  47.   
  48. end.  

2.定义dll

  1. library Formindll;  
  2.   
  3. uses  
  4.   SysUtils,  
  5.   Classes,   
  6.   UDllForm in 'UDllForm.pas' {DllForm};  
  7.   
  8. {$R *.res}  
  9. exports  
  10.    ShowDllFormInPanel,  
  11.    ShowDllForm;  
  12. begin  
  13. end.  
3.dll窗体调用 

     注意:dll窗体不能直接放在父窗体里面 ,这里可以使用panel作为父窗体 对应过程ShowDllFormInPanel

                 dll窗体不放在父窗体 则直接使用ShowDllForm 过程,想一个对话框的形式

  1. unit Unit1;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   SysUtils,Classes,Forms,Windows,Messages, Controls, StdCtrls, ExtCtrls;  
  7.   
  8. type  
  9.   TForm1 = class(TForm)  
  10.     btn1: TButton;  
  11.     pnl1: TPanel;  
  12.     btn2: TButton;  
  13.     procedure btn1Click(Sender: TObject);  
  14.     procedure btn2Click(Sender: TObject);  
  15.   private  
  16.     { Private declarations }  
  17.   public  
  18.     { Public declarations }  
  19.   end;  
  20.   
  21. var  
  22.   Form1: TForm1;  
  23.   procedure ShowDllFormInPanel(Parent:THandle);stdcall; external 'E:\test7\formindll.dll';  
  24.   procedure ShowDllForm;                       stdcall; external 'E:\test7\formindll.dll';  
  25. implementation  
  26.   
  27. {$R *.dfm}  
  28.   
  29. procedure TForm1.btn1Click(Sender: TObject);  
  30. begin  
  31.     ShowDllFormInPanel(pnl1.Handle);  
  32. end;  
  33.   
  34. procedure TForm1.btn2Click(Sender: TObject);  
  35. begin  
  36.     ShowDllForm;  
  37. end;  
  38.   
  39. end.  




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多