DLL种的MDI子窗体上的tab和回车都无效,偏偏这个程序又很要求键盘操作。
看了一些帖子,说是传句柄什么的,最近一直忙其他的事情,没时间仔细研究,
能否给个比较详细的例子,谢谢!

解决方案 »

  1.   

    在DLL的基类,或每个DLL中实现窗体的keypress。 (下面的例子是判断为TMemo就不切换活动控件)
    procedure TfrmBase.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if (Key = Chr(13)) or (Key = Chr(40)) then
      if not (ActiveControl is TMemo) then
        SelectNext(ActiveControl, True, True);
    end;
      

  2.   

    楼上的方法不能从根本上解决MDI子窗体存在的诸多问题,曾经经历很长时间的痛苦折磨,最终得到了答案,很简单,就是主程序和DLL都带VCL包编译,这样出来的子窗体与普通窗体一样好用,什么问题也都没了。如果楼主还不明白,可以加我QQ交流,希望少走弯路。
      

  3.   

    问题如下:
    1,带包编译后,主程序界面左上角的小图标就变成了白框
    2,本来MDI程序种,所有的子窗体以及子窗体上调用的窗体都应该包含在主窗体中,但是带包编译后,一级子窗体到是在主窗体中,再调用出来的窗体就跑到主窗体外面去了
      

  4.   

    将exe的application对象传入dll覆盖dll的application(之前保存dll的application,退出时置回)
      

  5.   

    谢谢楼上的兄弟,可否给个比较具体的例子,我对application这些概念不是很清楚
      

  6.   

    楼上算找对人了,你在delphifans.com上下载一个例子上面全解决了,呵呵去吧。
      

  7.   

    楼主问题还没解决呀,10楼的说法不妥,尽管传Application有传的道理,但与楼主的问题不相关,我看过楼主的代码,只要把主程序各单元中那些CoInitialize删除,DLL中建立数据模块,引用ADO控件的单元CoInitialize,好好整理一下DLL就应该没问题,因为我的程序就是这样做的,一点问题也没有。
      

  8.   

    把Controls单元的
    ControlAtomString := Format('ControlOfs%.8X%.8X', [HInstance, GetCurrentThreadID]);
    改成
    ControlAtomString := Format('ControlOfs%.8X%.8X', [0, GetCurrentThreadID]);
    别让它与模块相关就行了。
      

  9.   

    面对这类问题,我只会建议你带上vcl包来编译。