exe动态调用一个bpl,bpl内部有一个主窗体,由这个窗体调用各个内部窗体,内部窗体有使用到这个主窗体的实例
    问:bpl主窗体中要不要定义一个实例主窗体类的全局变量,如果没有实例内部窗体无法使用主窗体,如果不要定义,内部窗体该如何写代码引用主窗体呢?

解决方案 »

  1.   

    有很多种实现方法。
    首先,BPL就相当于DLL。
    BPL中要封装好远程调用,或者非确定性的,可以用参数,如消息等来处理。
      

  2.   

    内部窗体需要在如下位置注册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;
    这样不用定义全局变量也可以调用,封装成一个过程,方便调用。全局变量,没什么说的,直接定义使用就可以了。需要注意包的引用。
      

  3.   

    使用((self.owner) as TBplMainForm)找到实例 
    TBplMainForm 你的主窗体类名
      

  4.   

      LZ说的是主窗体也放到bpl里?你怎么调用 主窗体或别的窗体啊?
      

  5.   

    直接form.show; 或者form.showmodal 都可以的啊