国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

使用DLL文件中封裝的窗口

2019-11-18 18:46:00
字體:
供稿:網(wǎng)友
文章摘要:
    編寫軟件時(shí)常常使用到DLL文件,本文就使用DLL文件中封裝的窗口來說說Delphi中在DLL如何封裝窗口,如何調(diào)用DLL中封裝的窗口,及MDI-Child在DLL中載入并使用

一、在DLL中封裝窗口
    打開Delphi新建一個(gè)DLL工程,保存為usedll,生成代碼

library usedll;

新建一個(gè)窗體,添加一個(gè)Label和Button,設(shè)置如下:

object Form1: TForm1
Left = 192
Top = 133
Width = 334
Height = 221
Caption = 'DLL'#20013#20351#29992#31383#20307
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 Label1: TLabel
Left = 104
Top = 80
Width = 80
Height = 13
Caption = 'DLL'#20013#20351#29992#31383#20307
end
object Button1: TButton
Left = 120
Top = 152
Width = 75
Height = 25
Caption = #30830#23450
TabOrder = 0
OnClick = Button1Click
end
end

添加一過程:procedure LoadForm; export;
procedure LoadForm;
begin
Form1 := TForm1.Create(application);
try
Form1.ShowModal;
finally
Form1.Free;
end;
end;
全部完整的代碼:

library usedll;
uses
SysUtils,
Classes,
Form_Unit in 'Form_Unit.pas' {Form1};
{$R *.res}
exports
LoadForm index 1;
begin
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文件就完成了
二、調(diào)用DLL中封裝的窗口
    新建一個(gè)工程,添加一個(gè)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中載入并使用呢,下面就這個(gè)問題說說使用DLL文件中封裝的窗口。
新建一個(gè)DLL工程,保存為mdidll,再新建一個(gè)窗體,F(xiàn)ormStyle設(shè)為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窗口如下:
    新建一個(gè)工程,主窗口設(shè)置如下FormStyle設(shè)為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, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
T_ProvaChild = procedure (ParentApplication: TApplication; ParentForm: TForm); stdcall;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.N1Click(Sender: TObject);
var
DllHandle: THandle;
ProcAddr: FarProc;
ProvaChild: T_ProvaChild;
begin
DllHandle := LoadLibrary('mdidll');
ProcAddr := GetProcAddress(DllHandle, 'LoadChild');
if ProcAddr <> nil then
begin
ProvaChild := ProcAddr;
ProvaChild(Application,Self);
end;
end;
end.

結(jié)束語:
    到這里你應(yīng)該會(huì)用Delphi調(diào)用DLL文件中封裝的窗口了吧,如果還有不明白的話請(qǐng)與我聯(lián)系(主頁: http://yousoft.home.chinaren.com ,郵箱:yousoft@chinaren.com)

上一篇:讀一讀Scktsrvr.exe的源程序

下一篇:再談多態(tài)――向上映射及VMT/DMT

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 鄱阳县| 安吉县| 胶南市| 云梦县| 邓州市| 锡林浩特市| 望江县| 安新县| 晋城| 太仓市| 正定县| 新晃| 呼和浩特市| 丰原市| 和硕县| 成安县| 科尔| 公安县| 图木舒克市| 江孜县| 兴化市| 东港市| 屯门区| 冀州市| 黎川县| 师宗县| 沁水县| 长岛县| 三穗县| 富源县| 梅州市| 孝昌县| 镶黄旗| 洪雅县| 黄石市| 井陉县| 景宁| 黔东| 桐乡市| 河北区| 白水县|