Delphi 主窗体Panel中嵌入DLL窗体功能详细源码
来源:互联网 发布:淘宝视频可以放几分钟 编辑:程序博客网 时间:2024/06/07 17:55
自从我的博客被尘封了五年之久,终于选择在今天以主程序嵌入DLL窗体架构的源码为礼物送给大家,希望资源与大家共享,共祝未来的Delphi能够走的更远。
由于现在技术的日益发达,各种软件的界面日益美化,很多客户光看到原生的Delphi程序界面就会选择抛弃我们的产品。于是我们不得不对界面进行美化,对架构进行重新整理。首先要感谢360、QQ这些软件给我们提供了漂亮界面的基础:一个大标题导航栏+操作区域,简单、适用。
今天我们就以一个Demo来实现这种窗体结构,因为是在我的项目中已经使用,架构相关的代码已经被我整理了一遍,虽然看着简单,却真的费了我好多功夫。
程序界面:(真正使用的时候自己美化吧,这里仅仅是个例子。ps:我用的是Dev的控件)
其实程序的架构很简单:一个Panel做为容器,DLL中封装窗体,并将它停靠在panel中。
代码有点多,粘贴处部分有用的代码:
DLL中的工程源码:
- library dllForms;
-
-
-
-
-
-
-
-
-
-
-
- uses
- System.SysUtils,
- System.Classes,
- Vcl.Forms,
- dxCore,
- Winapi.Windows,
- FormDialog in 'FormDialog.pas' ,
- uLoadDLLForm in '..\uLoadDLLForm.pas',
- FormShow in 'FormShow.pas' ;
-
- {$R *.res}
-
- procedure DLLEntryPoint(Reason: DWORD);
- begin
- case Reason of
- DLL_PROCESS_ATTACH: dxUnitsLoader.Initialize;
- DLL_PROCESS_DETACH:
- begin
- dxUnitsLoader.Finalize;
- end;
- end;
- end;
-
-
-
-
- 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;
-
-
-
- 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;
-
- 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
-
- FActiveForm: TForm;
- public
-
- 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
-
- initDll;
- end;
-
- procedure TfrmMain.FormDestroy(Sender: TObject);
- begin
-
- uninitDll;
- end;
资源下载地址:http://download.csdn.net/detail/yueyun889/9864663