如何在mdi的主窗体中调用一个DLL中的子窗体(dll是动态调用的)
我是想在一个主窗体中动态的调用一个动态库用来显示一个子窗口
其中DLL中的窗体的formstyle :fsMDIchild
而调用动态库的是一个 formstyle :fsMDIform
这样那一位高手用过帮个忙吧多谢了。

解决方案 »

  1.   

    请大家帮助看看这个贴子(类似问题)
    主题是“关于Dll与mdi子窗体的研讨”
      

  2.   

    在这个dll中写一个显示formstyle的输出过程
    可以参考以下代码:
    function ShowFrm(AHandle:Thandle):bool;stdcall;
       begin
          Application.Handle:=AHandle;
          try
             formstyle:=Tformstyle.create(Application);
                with formstyle do
                   begin
                      if ShoeModal = mrOK then
                         begin
                         //在关闭该窗口之前 
                         //这里可以加上一些处理,根据需要
                         end;
                   end;
          finally
             formstyle.free;
          end; 
       end;
      

  3.   

    zhou80bin(彬彬) 的差不多了
    function ShowFrm(AHandle:Thandle):bool;stdcall;
       begin
          Application.Handle:=AHandle;
             myfrom:=TMyform.create(Application); 
          try
            {myfrom:=TMyform.create(Application)比        Application.CreateFrom(tmyform,myform)要好}        
                with myform do
                   begin
                   formstyle:=fsMDIchild;   
                   if ShoWModal = mrOK then
                         begin
                         ................... 
                         end;
                   end;
          finally
             myform.free;
          end; 
       end;
      

  4.   

    formstyle:=fsMDIchild 这个会报错的提示没有活动的主窗口
      

  5.   

    http://www.csdn.net/expert/topic/648/648015.xml?temp=.8814661http://www.csdn.net/expert/topic/628/628608.xml?temp=.791073http://www.csdn.net/expert/topic/634/634413.xml?temp=.571377
      

  6.   

    应该传Application类到DLL库
    function ShowFrm(AHandle:TApplication):bool;stdcall;
       begin
          Application:= AHandle;
          try
             formstyle:=Tformstyle.create(Application);
                with formstyle do
                   begin
                      if ShoeModal = mrOK then
                         begin
                         //在关闭该窗口之前 
                         //这里可以加上一些处理,根据需要
                         end;
                   end;
          finally
             formstyle.free;
          end; 
       
      

  7.   

    Liusp(夜深千帐灯)大哥你好呀你说的这个我试过了在你静态调用时是可以的可是在动态的调用时就不行了我觉的这个问题我们是值的处理的。
      

  8.   

    需要做两个过程或函数,并且application要传入。var
      form1 : Tform1;
      OldApp : Tapplication;
    procedure showme(App : Tapplication);stdcall;
    procedure reApp();stdcall;
    implementation{$R *.dfm}
    procedure showme(App : Tapplication);stdcall;
    var
      Cform : Tform1;
    begin
      oldapp := application;
      application := app;
      form1 := Tform1.create(app.MainForm);
      form1.show;
    .......
    .......
    end;
    procedure reApp();stdcall;
    begin
      application :=  OldApp;
    end;
    end.
      

  9.   

    http://www.torry.net/samples/samples/forms/childwnd.zip