Bpl内各窗体如何内部调用? exe动态调用一个bpl,bpl内部有一个主窗体,由这个窗体调用各个内部窗体,内部窗体有使用到这个主窗体的实例 问:bpl主窗体中要不要定义一个实例主窗体类的全局变量,如果没有实例内部窗体无法使用主窗体,如果不要定义,内部窗体该如何写代码引用主窗体呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有很多种实现方法。首先,BPL就相当于DLL。BPL中要封装好远程调用,或者非确定性的,可以用参数,如消息等来处理。 内部窗体需要在如下位置注册interfacetype //这里需要声明一个类的类 TForm1Class = class of TForm1; TForm1 = class(TForm)........ end;.....initialization RegisterClass(TForm1);finalization UnRegisterClass(TForm1);这样你在其他窗体就可以动态创建 TForm1 的实例了。创建的时候,你需要找到这个类的类。类似代码如下:var vClass: TClass; vForm: TForm;begin vClass := FindClass('TForm1Class'); if vClass <> nil then begin vForm := TFormClass(vClass).Create; try vForm.showmodal; finally vForm.free; end; end;end;这样不用定义全局变量也可以调用,封装成一个过程,方便调用。全局变量,没什么说的,直接定义使用就可以了。需要注意包的引用。 使用((self.owner) as TBplMainForm)找到实例 TBplMainForm 你的主窗体类名 LZ说的是主窗体也放到bpl里?你怎么调用 主窗体或别的窗体啊? 直接form.show; 或者form.showmodal 都可以的啊 定时显示已用时间和剩余时间:WaitableTimer和线程封装的问题 delphi如何检测程序的稳定 甘特图控件 请教:WORD的OLE问题 unsatisfied forward or external declaration ..... 还是关于图片显示的问题 使用TMSCOMM要求license的问题 将文件保存到Oracle中去????? 如何将选中的记录上下移动,不是单单的指针移动位置,急急急!!绝对给分!! 如何屏蔽各种windows下的快捷健 Array 数组、Subrange 子界、命名和不命名,求例子。。 FastReport:Barcode Error!!!
首先,BPL就相当于DLL。
BPL中要封装好远程调用,或者非确定性的,可以用参数,如消息等来处理。
//这里需要声明一个类的类
TForm1Class = class of TForm1; TForm1 = class(TForm)
....
....
end;.....
initialization
RegisterClass(TForm1);
finalization
UnRegisterClass(TForm1);这样你在其他窗体就可以动态创建 TForm1 的实例了。
创建的时候,你需要找到这个类的类。类似代码如下:
var
vClass: TClass;
vForm: TForm;
begin
vClass := FindClass('TForm1Class');
if vClass <> nil then
begin
vForm := TFormClass(vClass).Create;
try
vForm.showmodal;
finally
vForm.free;
end;
end;
end;
这样不用定义全局变量也可以调用,封装成一个过程,方便调用。全局变量,没什么说的,直接定义使用就可以了。需要注意包的引用。
TBplMainForm 你的主窗体类名