end.
unit Form_Unit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; ApplicationName: String; procedure LoadForm(Handle: THandle; AppName: ShortString); export; implementation {$R *.dfm} procedure LoadForm(Handle: THandle; AppName: ShortString); begin Application.Handle := Handle; ApplicationName := AppName; Form1 := TForm1.Create(Application); try Form1.ShowModal; finally Form1.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin self.close; end; end. 编译后生成usedll.dll文件,至此DLL文件就完成了 二、调用DLL中封装的窗口 新建一个工程,添加一个Button,窗体布局如下: object Form1: TForm1 Left = 192 Top = 133 Width = 336 Height = 222 Caption = Form1 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = MS Sans Serif Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Button1: TButton Left = 128 Top = 88 Width = 75 Height = 25 Caption = #25171#24320#31383#20307 TabOrder = 0 OnClick = Button1Click end end完整的代码如下: unit Use_Unit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; procedure LoadForm; external usedll.dll index 1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin LoadForm; end; end. 三、MDI-Child在DLL中载入并使用 如果是MDI-Child又如何在DLL中载入并使用呢,下面就这个问题说说使用DLL文件中封装的窗口。 新建一个DLL工程,保存为mdidll,再新建一个窗体,FormStyle设为fsMDIChild,如下: object Form1: TForm1 Left = 192 Top = 133 Width = 344 Height = 234 Caption = MDI Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = MS Sans Serif Font.Style = [] FormStyle = fsMDIChild OldCreateOrder = False Position = poDefault Visible = True OnClose = FormClose PixelsPerInch = 96 TextHeight = 13 end 代码如下: unit mdi_Unit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } MyParentForm: TForm; MyParentApplication: TApplication; end; var DllApplication: TApplication; implementation {$R *.dfm} procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; end; end.
library mdidll; uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, mdi_Unit in mdi_Unit.pas {Form1}; procedure LoadChild(ParentApplication: TApplication; ParentForm: TForm); export; stdcall; var Form1: TForm1; DllProc: Pointer; begin Application:=ParentApplication; Form1:=TForm1.Create(ParentForm); Form1.MyParentForm:=ParentForm; Form1.MyParentApplication:=ParentApplication; Form1.Show; end; procedure DLLUnloadProc(Reason: Integer); register; begin if Reason = DLL_PROCESS_DETACH then Application:=DllApplication; end; {$R *.res} exports LoadChild; begin DllApplication:=Application; DLLProc := @DLLUnloadProc; end. 编译后生成mdidll.dll文件。 使用DLL中的MDI-Child窗口如下: 新建一个工程,主窗口设置如下FormStyle设为fsMDIForm: object Form1: TForm1 Left = 192 Top = 133 Width = 544 Height = 375 Caption = Form1 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = MS Sans Serif Font.Style = [] FormStyle = fsMDIForm Menu = MainMenu1 OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object MainMenu1: TMainMenu Left = 72 Top = 136 object N1: TMenuItem Caption = #26032#24314(&N) OnClick = N1Click end end end 代码: unit usemdi_Unit; interface uses Windows,
|
|
|
|
|
|