delphi创建DLL动态链接库(B)

第二节 DLL 中的Delphi窗体

一、在DLL 中放置窗的的方法

在DLL 中,除了放置标准的函数和过程以外,也可以放置

已经做好的的delphi窗体,也可以把做好的窗体供其它程序使

用,方法是:

1)首先按普通方法制作窗体,不过在interface区域,对接

口函数做如下声明

function Createform(capt:string):string;stdcall;

2)在implementation下加入接口函数

function Createform(capt:string):string;stdcall;

var Form1: TForm1;

begin

form1:=Tform1.Create(application);

form1.show;

form1.caption:=capt;

end;

3)制作DLL 动态连接库,但要声明:

uses

unit1 in ‘unit1.pas’;

exports

{写入接口标示符}

Createform name ‘Myform’;

4)调用窗体的程序按普通方法制作,但是 在implementation下首

先声明要调用的DLL函数

const

gdi32=’myFormdll.dll’;

function Createform(capt:string):string;stdcall;external gdi32 name ‘Myform’;

procedure TForm3.Button1Click(Sender: TObject);

var n,m:string;

begin

m:=’我的窗体’;

Createform(m);var n,m:string;

end;

二、DLL 中的调用窗体时的数据传递

在窗体调用时,可以用普通的函数方法传递数据,下面举个例子。

1)建立窗体

做一个改变颜色窗体,放在DLL 中,可以用普通的方法来做,但要作如下声明:

function mycolor(col:longint):longint;stdcall;

function Getcolor:longint;stdcall;

其中,mycolor为构造窗体;Getcolor为传递颜色数据。在implementation区声明一个窗体内全局的变量

var color1:longint;

下面写出相应的程序

function mycolor(col:longint):longint;stdcall;

var Form1: TForm1;

begin

form1:=Tform1.Create(application);

form1.show;

form1.panel1.Color:=col;

form1.edit1.Text:=inttostr(form1.panel1.Color);

result:=color1;

end;

function Getcolor:longint;stdcall;

begin

result:=color1;

end;

procedure TForm1.ScrollBar1Change(Sender: TObject);

begin

panel2.Color:=RGB(ScrollBar1.Position,ScrollBar2.Position,ScrollBar3.Position);

edit2.Text:=inttostr(panel2.Color);

color1:=panel2.Color;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Free; //析构Form1

end;

2)建立动态连接库

运行成功后,再建立动态连接库:

library FormDLL;

{从文件调入}

uses

unit1 in ‘unit1.pas’;

exports

{写入接口标示符}

Mycolor name ‘My’,

Getcolor name ‘Get’;

begin

end.

3)建立调用的程序

首先声明要调用的DLL函数

const

gdi32=’formDll.dll’;

function Mycolor(col:longint):longint;stdcall;external gdi32 name ‘My’;

function Getcolor:longint;stdcall;external gdi32 name ‘Get’;

然后写出相应的程序

procedure TForm1.Button1Click(Sender: TObject);

begin

Mycolor(color);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

color:=getcolor;

end;

我们可以看到,在改变颜色的窗体中做了颜色变化后,当前窗体的颜色将发生变化。

handle



发表评论

您的电子邮箱地址不会被公开。

60 + = 70