读书人

如何动态加载BPL

发布时间: 2012-03-12 12:45:32 作者: rapoo

怎么动态加载BPL
在一个bpl封装了几个窗体单元,现在就是可以show出来,但是,show出来的窗体上的任何事件都没有用(就是点击或一些事件都不起作用了)
求解。为什么?

Delphi(Pascal) code
procedure TForm1.mniN1Click(Sender: TObject);var  Aclass: TPersistentClass;begin  Pack := LoadPackage('package1.bpl');  if Pack <> 0 then  begin    Aclass := GetClass('Tform1');//这里一直都是空值    if Aclass <> nil then    begin      with TComponentClass(Aclass).Create(Application) as TCustomForm  do//可以是这里的问题      begin        try          Show;        finally        end      end;    end;  end;  //TForm(Aclass).BringToFront;end;


[解决办法]
http://www.docin.com/p-210511565.html
[解决办法]
Aclass := GetClass('Tform1');//这里一直都是空值
-----------------------
在TForm1的initialization部分注册类
registerClass(TForm1)


后续的问题有点瞎说了。
既然前面的GetClass返回空,那Create的时候必然报错

[解决办法]
build with runtime packages勾选上没啊
[解决办法]
procedure TForm1.mniN1Click(Sender: TObject);
var
Aclass: TPersistentClass;
Instance: TCustomForm
begin
Pack := LoadPackage('package1.bpl');
if Pack <> 0 then
begin
Aclass := GetClass('Tform1');//这里一直都是空值
if Aclass <> nil then
begin
Instance := TCustomForm(AClass.NewInstance);
Instance.Create(Application);
Instance.Show;
Instance.BringToFront;
end;
end;
end;

读书人网 >.NET

热点推荐