请问bpl使用问题 ( 积分: 100 )

  • 主题发起人 主题发起人 windlin
  • 开始时间 开始时间
W

windlin

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何使用bpl里的form,谢谢
var
query_module: HMODULE;//封装查询bpl模块
begin
try
query_module:= LoadPackage('Package1.bpl');//加载查询模块
这里如何使用bpl里的form
finally
UnLoadPackage(query_module);
end;
end;
如何使用bpl里的form,本人初学bpl使用问题,如你有好的方式,那更谢谢了
 
请问如何使用bpl里的form,谢谢
var
query_module: HMODULE;//封装查询bpl模块
begin
try
query_module:= LoadPackage('Package1.bpl');//加载查询模块
这里如何使用bpl里的form
finally
UnLoadPackage(query_module);
end;
end;
如何使用bpl里的form,本人初学bpl使用问题,如你有好的方式,那更谢谢了
 
var
f: TForm;
begin
//省去LoadPackage
f := TComponentClass(FindClass('TYourClass')).Create(Self);
f.ShowModal;
//使用完后,再调用UnLoadPackage卸载包
end;
在编译主程序的时候,一定要记得在工程的Options中的Packages页选中“Build with runtime Package”复选框。

Delphi5开发人员指南中的做法:
FCurrentModuleHandle : HModule;在Private中进行变量声明,以在LoadPackage中供调用。
在调用时,可用:
Procedure TClassName.LoadPackage…;
Var
Form : TForm;
FormClass : TFormClass;
Begin
If FCurrentModuleHandle <> 0 then //处理把句柄释放语句。
Try
FCurrentModuleHandle := LoadPackage(‘需要加载的包名’);
FormClass := TFormClass(FindClass(‘类名’));
Form := FormClass.Create(Self, pnlParent);
Form.Show;
Except
On E: Exception do
Begin
//释放包句柄语句;
End;
End;
End;

Procedure 释放包句柄过程;
Begin
If FCurrentModuleHandle <> 0 then
Begin
If Form <> nil then
Begin
Form.Free;
Form := nil;
End;
unRegisterModuleClasses(FCurrentModuleHandle);
unloadPackage(FCurrentModuleHandle);
FCurrentModuleHandle := 0;
End;
End;
 
后退
顶部