要在DLL中写一个函数,交给总控调用,函数很简单,就是创建DLL中的窗体,然后显示出来就行了。我长期使用这种方式,代码晚上可以给你贴出来。
这种放在DLL中的窗体在设计时和放在工程中没有任何区别,就是调试的时候稍微麻烦一点,需要指定宿主程序,并且有一个问题,就是总控调用DLL的窗体后,DLL中的窗体会在任务栏上产生独立的标志,比如,你调用了5个DLL中的窗体,那么在任务栏上你会看见这些窗体,有点影响美观。

解决方案 »

  1.   

    举个例子吧:
        我已做好了两个窗体:库存统计,销售统计,他们的标识分别是:
       unit_kucun,frm_kucun;unit_xiaoshou,frm_xiaoshou,我该怎么在
       Dll中写这个函数或过程?
        还有在调用时?
        能不能给我一个简单的例子?
    to   jabmoon(刺月) :我还是等着您的例子,谢谢了!
      

  2.   

    很简单的,和普通DLL调用没有大的区别,我给你发个例子吧!注意接收!
      

  3.   

    当然还可以通过  类引用  来做,
    这样的话可以通过一个统一的接口来调用DLL中的多个不同的窗体。
    DLL的做法与普通做法差不多,但要多一个类引用 的接口而已。
      

  4.   

    to V_Lucky(最优解) :
       麻烦你再发一次好吗?我刚才检查邮箱了因放不下而被拒受了
       不好意思!
      

  5.   

    可以将调用dll的Application的句柄作为参数传递给dll中的窗体就可以解决jabmoon(刺月) 的问题。如:library ProBuy;
    uses
    Windows,SysUtils,Classes,Forms,
     Buy in 'Buy.pas' {FBuy};procedure Pro_Buy_New(App: TApplicatoin);stdcall;export;
    var
      Child : TFBuy;
    begin
      Child := nil;
      try
        Child := TFBuy.Create(App);
        Child.Show();
      except
        Child.Free();
      end;
    end;exports
      Pro_Buy_New;begin
    end;
      

  6.   

    你好,贴上我的代码,是很久以前我做的一个系统,当时刚学Delphi不久,现在看起来觉得代码真臭,将就了吧。我有个模块为地区,为一个DLL,里边有四个窗体,接口函数代码如下:Library XY003;uses
      Forms,XY_Base1,
      XY003_1 in 'XY003_1.pas' {FormXY003_1},
      XY003_2 in 'XY003_2.pas' {FormXY003_2},
      XY003_3 in 'XY003_3.pas' {FormXY003_3},
      XY003_4 in 'XY003_4.pas' {FormXY003_4};{$R *.RES}  procedure XY003Show(PROGRAMPARAM:INTEGER);stdcall;
      var
         WaitForm:TForm;
      begin
         WaitForm:=XYWaitForm('正在加载程序,请稍候......');
         try
            Application.CreateForm(TFormXY003_1, FormXY003_1);
            FormXY003_1.PROGRAMPARAM:=PROGRAMPARAM;
            FormXY003_1.Show;
         finally
            WaitForm.Free;
            WaitForm:=nil;
         end;
      end;  exports
         XY003Show;//外部调用函数,用于调用[地区层次]模块begin
    end.其中XY003Show这个函数用exports申明为外部调用,然后在总控单元有如下代码:procedure XY003Show PROGRAMPARAM:INTEGER);stdcall;external 'XY003.DLL'然后就可以用XY003Show调用窗体了
      

  7.   

    你好,贴上我的代码,是很久以前我做的一个系统,当时刚学Delphi不久,现在看起来觉得代码真臭,将就了吧。我有个模块为地区,为一个DLL,里边有四个窗体,接口函数代码如下:Library XY003;uses
      Forms,XY_Base1,
      XY003_1 in 'XY003_1.pas' {FormXY003_1},
      XY003_2 in 'XY003_2.pas' {FormXY003_2},
      XY003_3 in 'XY003_3.pas' {FormXY003_3},
      XY003_4 in 'XY003_4.pas' {FormXY003_4};{$R *.RES}  procedure XY003Show(PROGRAMPARAM:INTEGER);stdcall;
      var
         WaitForm:TForm;
      begin
         WaitForm:=XYWaitForm('正在加载程序,请稍候......');
         try
            Application.CreateForm(TFormXY003_1, FormXY003_1);
            FormXY003_1.PROGRAMPARAM:=PROGRAMPARAM;
            FormXY003_1.Show;
         finally
            WaitForm.Free;
            WaitForm:=nil;
         end;
      end;  exports
         XY003Show;//外部调用函数,用于调用[地区层次]模块begin
    end.其中XY003Show这个函数用exports申明为外部调用,然后在总控单元有如下代码:procedure XY003Show PROGRAMPARAM:INTEGER);stdcall;external 'XY003.DLL'然后就可以用XY003Show调用窗体了
      

  8.   

    演示如何从一个外部DLL中调入一个子窗口(306KB)发出