Delphi 主窗体Panel中嵌入DLL窗体功能详细源码
2017-06-08 14:54
591 查看
自从我的博客被尘封了五年之久,终于选择在今天以主程序嵌入DLL窗体架构的源码为礼物送给大家,希望资源与大家共享,共祝未来的Delphi能够走的更远。
由于现在技术的日益发达,各种软件的界面日益美化,很多客户光看到原生的Delphi程序界面就会选择抛弃我们的产品。于是我们不得不对界面进行美化,对架构进行重新整理。首先要感谢360、QQ这些软件给我们提供了漂亮界面的基础:一个大标题导航栏+操作区域,简单、适用。
今天我们就以一个Demo来实现这种窗体结构,因为是在我的项目中已经使用,架构相关的代码已经被我整理了一遍,虽然看着简单,却真的费了我好多功夫。
程序界面:(真正使用的时候自己美化吧,这里仅仅是个例子。ps:我用的是Dev的控件)
其实程序的架构很简单:一个Panel做为容器,DLL中封装窗体,并将它停靠在panel中。
代码有点多,粘贴处部分有用的代码:
DLL中的工程源码:
主窗体调用的代码:
资源下载地址:http://download.csdn.net/detail/yueyun889/9864663
由于现在技术的日益发达,各种软件的界面日益美化,很多客户光看到原生的Delphi程序界面就会选择抛弃我们的产品。于是我们不得不对界面进行美化,对架构进行重新整理。首先要感谢360、QQ这些软件给我们提供了漂亮界面的基础:一个大标题导航栏+操作区域,简单、适用。
今天我们就以一个Demo来实现这种窗体结构,因为是在我的项目中已经使用,架构相关的代码已经被我整理了一遍,虽然看着简单,却真的费了我好多功夫。
程序界面:(真正使用的时候自己美化吧,这里仅仅是个例子。ps:我用的是Dev的控件)
其实程序的架构很简单:一个Panel做为容器,DLL中封装窗体,并将它停靠在panel中。
代码有点多,粘贴处部分有用的代码:
DLL中的工程源码:
library dllForms; { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } uses System.SysUtils, System.Classes, Vcl.Forms, dxCore, Winapi.Windows, FormDialog in 'FormDialog.pas' {frmDialog}, uLoadDLLForm in '..\uLoadDLLForm.pas', FormShow in 'FormShow.pas' {frmShow}; {$R *.res} procedure DLLEntryPoint(Reason: DWORD); begin case Reason of DLL_PROCESS_ATTACH: dxUnitsLoader.Initialize; DLL_PROCESS_DETACH: begin dxUnitsLoader.Finalize; end; end; end; /// <summary> /// 弹出式窗体的调用 /// <param name="AParamStr">窗体名称</param> /// </summary> procedure ShowDLLForm(AParamStr: String); stdcall; var vForm: TfrmDialog; begin if Sametext('TfrmDialog', AParamStr) then begin vForm := TfrmDialog.Create(nil); try vForm.ShowModal; finally FreeAndNil(vForm); end; end; end; /// <summary> /// 嵌入式窗体,返回TFormClass类,由主程序管理Form /// </summary> function GetForm(ClassName: PChar; ADllParams: pDllParams): TFormClass; stdcall; begin if FindClass(ClassName) = nil then Exit; Result:=TFormClass(FindClass(ClassName)); end; exports ShowDLLForm, GetForm; begin DLLProc := @DLLEntryPoint; DLLEntryPoint(DLL_PROCESS_ATTACH); end.
主窗体调用的代码:
unit FormMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, cxGraphics, cxLookAndFeels, cxLookAndFeelPainters, Vcl.Menus, Vcl.StdCtrls, cxButtons, Vcl.ExtCtrls, uLoadDLLForm;//关键的代码在uLoadDllForm单元中 type TfrmMain = class(TForm) Label1: TLabel; pnlTitle: TPanel; btnJinShui: TcxButton; btnJiaoYu: TcxButton; btnMall: TcxButton; btnClose: TcxButton; btnJinrong: TcxButton; pnlContainer: TPanel; procedure btnJinrongClick(Sender: TObject); procedure btnJinShuiClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } FActiveForm: TForm; //存储当前展示的Form(容器类窗体) public { Public declarations } end; var frmMain: TfrmMain; implementation {$R *.dfm} procedure TfrmMain.btnJinrongClick(Sender: TObject); var AForm: TForm; begin AForm := LoadContainerFormDLL('dllForms.dll', 'TfrmShow', pnlContainer); if FActiveForm = nil then FActiveForm := AForm else if FActiveForm <> AForm then begin FActiveForm.Hide; FActiveForm := AForm; end; end; procedure TfrmMain.btnJinShuiClick(Sender: TObject); begin //主程序调用,弹出框 LoadFormDLL('dllForms.dll', 'TfrmDialog'); end; procedure TfrmMain.FormCreate(Sender: TObject); begin //初始化DLL加载项 initDll; end; procedure TfrmMain.FormDestroy(Sender: TObject); begin //释放所有资源 uninitDll; end;
资源下载地址:http://download.csdn.net/detail/yueyun889/9864663
相关文章推荐
- Delphi 主窗体Panel中嵌入DLL窗体功能详细源码
- delphi把窗体嵌入到dll中。实现方法
- Delphi 加载dll中的窗体放到主程序的panel里面。
- Dll中的窗体嵌入主程序的Panel
- WinForm程序如何将子窗体嵌入到父窗体的Panel里
- [转]Delphi实现QQ窗体的缩入伸出功能
- Delphi模拟QQ窗体伸缩功能
- Delphi dll窗体封装
- 在dll中delphi中封装窗体(实例)
- DELPHI 中让嵌入窗体的 WebBrowser 控件无边框(转)
- [整理]c#简单调用DELPHI DLL封装窗体
- delphi 调用dll窗体
- 源码pub:功能强大的登陆窗体(winForm)
- 用Delphi模拟QQ窗体伸缩功能
- 专门针对delphi的,嵌入源码的病毒(转)
- 转自genispan的专栏 - delphi 调用dll窗体
- 用Delphi模拟QQ窗体伸缩功能
- 将窗体嵌入到Panel
- C#调用Delphi编写的Dll,实现绘图的功能
- 在dll中delphi中封装窗体(实例)