我把MDI子窗体做成DLL后。子窗体中,不能用Tab切换控件焦点.也不能用Button上设置的快捷键了。
   我的代码如下:DLL中这么写的function ShowChild(App :TApplication ; pFormFreeCallBack : Pointer) : TFormChild;stdcall; export;
Begin
        Application:=App;
        Form_Record:=TFormChild.Create(Application);
        result:=FormChild;
End;
///**Application 保存另一个单独的单元中procedure SetOldApplication;stdcall;export;
Begin
        Application:=OldApp;
end;exports
     ShowChild,SetOldApplication;
begin
        OldApp:=Application;
end.主窗体中这么写的:
  TF_ShowChild=Function(App :TApplication ;pFreeCallBack : Pointer):TForm ;stdcall; var
   ShowChild : TF_ShowChild;
   Form  : TForm;
   testDLL :DWODRD;
begin
  testDll:=LoadLibrary('Project3.dll');
  showChild:=GetProcAddress(testDll,'ShowChild');
  Form:=ShowChild(application,nil);
  fORM.Show;
end;谁能帮我解决,我可以发例程,有重谢哦。

解决方案 »

  1.   


     ahyf(冷剑白狐) :
        你写的应该没问题啊!主窗体改为:
      TF_ShowChild=Function(App :TApplication ;pFreeCallBack : Pointer):TForm ;stdcall; var
       ShowChild : TF_ShowChild;
       Form  : TForm;
       testDLL :DWODRD;
    begin
      testDll:=LoadLibrary('Project3.dll');
      showChild:=GetProcAddress(testDll,'ShowChild');
      Form:=ShowChild(application,nil);
      fORM.Show;//--改为fORM.ShowModal
    end;
      

  2.   

    up,up,up
    我用的dll中封装了一个主窗体和子窗体,子窗体(frmstytle 设置为fsMDIChild)上有一个tabpage控件,有一个系统默认的激活页面,系统运行时报错:Error reading PageControl1:TTabIndex:can't create form.No MID forms are current active
    该怎么解决?
      

  3.   

    RuinRice(紫泪) :
       感谢你的回答,但是我的子窗体的FormStyle=fsMDIChild  不能ShowModal
      

  4.   

    luming988():
       我想,你报错的地方,应该是PageControll 的OnChange 事情里吧
      

  5.   

    dll的project定义了一个open函数供其他程序调用,代码如下:
    Function Open():Boolean;stdcall;
    var
      frmMain:TfrmMain;//主窗体
    Begin
        Application.CreateForm(TfrmMain, frmMain);
        Application.CreateForm(TmessageFrm, messageFrm);//子窗体
        Application.CreateForm(TfrmPubInfo, frmPubInfo);//子窗体
        frmMain.ShowModal;    Result:=True;
    End;
      

  6.   

    我想,你报错的地方,应该是PageControll 的OnChange 事情里吧
    如果情况就象你所说的,那该怎么办?总不能不用吧
      

  7.   

    哈哈! 应该是可以的! 
    要注意几点:
    1,参数Application 可以不用传递的,在 Project -> option 的 packages 钩上 build
       with runtime packages. 主窗体和MDI 子窗体都要钩上的!
    2, MDI子窗体不能用 ShowModal 只能用 Show;
    3, MDI子窗体关闭的时候记得  Action := Cafree; 而且 窗体变量 := nil;
    4, 所有MDI子窗体最好在程序由代码创建,不要自动创建.
       好处:节省内存,启动快!