怎么动态加载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;