利用DLLs实现窗体重用的一般步骤
利用DLLs实现窗体重用的步骤是
在集成开发环境(IDE)中按自己的需要设计一个窗体
编写一个用于输出的函数或过程在该函数或过程中设计的窗体被实例化
重复步骤直到完成所有重用窗体的设计
打开工程文件进行修改以适应生成 dll文件的需要
()把保留字program设为library;
()从uses子句中去掉Forms单元
()移去beginend之间的所有代码
()在uses子句下begin…end块之前添加保留字exprotsexports 后是输出函数名或过程名
编译生成DLLs文件
在其它应用程序中调用重用窗体
重用窗体的调用同一般DLLs函数或过程的调用完全一致不再赘述读者可参看下面的例子
窗体重用实例
下面我们通过一个具体的实例来说明窗体重用的设计过程我们在一个名为passformdll 的文件中储存了一个口令设置窗口和一个口令检查窗口而后在一个Delphi 编写的程序和一个VB编写的程序中进行调用事实证明这种方法是完全可行的
窗体重用DLLs的设计
窗体重用DLLs的设计依照()中介绍的步骤进行DLLs中的两个窗体 SetPassWordForm和GetPassWordForm分别用于设置和检查口令它们的设计界面如图所示
窗体类TSetPassWordForm定义了两个数据成员Verified和PassWord用于记录口令确认状态和设置的口令TSetPassWordForm的定义如下
type
TSetPassWordForm = class(TForm)
Label: TLabel;
Edit: TEdit;
OKBtn: TBitBtn;
CancelBtn: TBitBtn;
procedure FormCreate(Sender: TObject)
procedure EditKeyPress(Sender: TObject; var Key: Char)
private
{ Private declarations }
Verified: Boolean;
public
{ Public declarations }
PassWord: PChar;
end;
窗口生成时对数据成员和部件状态进行初始化
procedure TSetPassWordFormFormCreate(Sender: TObject)
begin
Verified := False;
PassWord := StrAlloc()
OKBtnEnabled := False;
LabelCaption := Please Input PassWord:;
end;
按钮OKBtn在程序启动时Enabled属性设置为False直到口令被正确设置后Enabled属性才恢复为True这样就保证了只有口令被正确设置后口令设置窗口才能正常关闭否则只能按Cancel按钮取消
在口令设置代码单元中定义了一个输出函数SetPassWord用于生成口令设置窗口并返回设置的口令
function SetPassWord(PWord: PChar) Boolean;
var
SetPassWordForm: TSetPassWordForm;
begin
Result := False;
SetPassWordForm := TSetPassWordFormCreate(Application)
try
with SetPasswordForm do
if ShowModal = mrOK then
begin
StrCopy(PWordStrUpper(Password))
Result := True;
end;
finally
SetPasswordFormFree;
end;
end;
口令成功设置把PassWord的值拷贝给PWord输出并返回True应该注意的是由于 PWord本身就是指针类型指向一个字符串的地址因而虽然PWord用于输出但在参数表中仍为传值参数而不是传址参数另外调用函数StrCopy要求PWord在传入前已分配内存否则会导致一个一般保护错try…finally用于保护窗口所占用内存资源在任何情况下都能正常释放读者可参看第十二章
[] [] [] []