求解:
说明:Tfrmbaseform = Class(Tform);(在A运行时包中)
TfrmBaseForm1 = Class(TfrmBaseForm);(在B运行时包中)主程序中:
的主窗体中已经引用了A包中的TfrmBaseForm的单元.
下面是主程序的主界面中的一个按钮的OnClick代码:问题出在 myBase := frm As TfrmBaseForm;一句,请精通DELPHI的大大帮帮忙啊!
procedure TfrmMain.Button1Click(Sender: TObject);
VAR
handlePack:THandle ;
AClass: TPersistentClass;
ClassName:string;
frm:TForm ; myBase:TfrmBaseForm ; //{TfrmBaseForm在一个运行时包A中}
begin
handlePack := LoadPackage('Myform.bpl');//在MyForm包中有Tfrmbaseform1=Class(TfrmBaseForm)
ClassName := 'Tfrmbaseform1';
if handlePack > 0 then
begin
AClass := GetClass(ClassName); if AClass=nil then exit;
frm := TComponentClass(AClass).Create(Application) as TForm; myBase := frm As TfrmBaseForm;//这句为什么要报错啊?Invalid class typecast,如果没有这句,下句的窗体可正常显示出来 myBase.ShowModal ;
end;
end;
说明:Tfrmbaseform = Class(Tform);(在A运行时包中)
TfrmBaseForm1 = Class(TfrmBaseForm);(在B运行时包中)主程序中:
的主窗体中已经引用了A包中的TfrmBaseForm的单元.
下面是主程序的主界面中的一个按钮的OnClick代码:问题出在 myBase := frm As TfrmBaseForm;一句,请精通DELPHI的大大帮帮忙啊!
procedure TfrmMain.Button1Click(Sender: TObject);
VAR
handlePack:THandle ;
AClass: TPersistentClass;
ClassName:string;
frm:TForm ; myBase:TfrmBaseForm ; //{TfrmBaseForm在一个运行时包A中}
begin
handlePack := LoadPackage('Myform.bpl');//在MyForm包中有Tfrmbaseform1=Class(TfrmBaseForm)
ClassName := 'Tfrmbaseform1';
if handlePack > 0 then
begin
AClass := GetClass(ClassName); if AClass=nil then exit;
frm := TComponentClass(AClass).Create(Application) as TForm; myBase := frm As TfrmBaseForm;//这句为什么要报错啊?Invalid class typecast,如果没有这句,下句的窗体可正常显示出来 myBase.ShowModal ;
end;
end;
frm 是 TfrmMain 的实例,你想把它 as 成 TfrmBaseForm 当然要报错了
本来TfrmBaseForm就是只在同一个包中定义的,并没有第二份,只不过在主程序中引用和B包(即MyForm.bpl)中引用而已,因此不存在一不一致的问题TO: myBase := TfrmBaseForm(frm);
这种改法与之前的 myBase := frm as TfrmBaseForm只不过是写法不同而已,都是类型强制转换,没有效果,也是不行的TO: 你代码相当于 frm := TfrmMain.Create as TForm
frm 是 TfrmMain 的实例,你想把它 as 成 TfrmBaseForm 当然要报错了
怎么会相当于frm := TfrmMain.create as TForm呢?下面我都讲了,如果没有 MyBase := frm As TfrmBaseForm这一句,frm.showmodal是可以显示出正常的结果的,因此你没有看清上面的代码的意思各位大大帮帮忙啊,俺已经在这个问题上耗了2天了
LZ添加一句myBase:=TfrmBaseForm.Create(nil);
看看行不~