MDIMainForm 发送消息激活被遮挡的dll内的MDIChildForm,sendmessage(MDIChildForm.Handle,WM_ACTIVATE,0,0)和
sendmessage(MDIChildForm.Handle,WM_SETFOCUS,0,0)都试了就是不行,实在是没辙了……

解决方案 »

  1.   

    LZ参考下这个帖子吧
    http://topic.csdn.net/t/20030401/23/1606614.html
      

  2.   

    谢谢楼上,不知道是不是因为MainForm和ChildForm不是同一个Screen,但是如果我把Screen当做参数传入Dll时,程序时不时会出现"can not assign a TFont to a TFont"的错误,我记得原来看到这针对这个问题的解决办法,不过现在找不到了,所以Dll里面没有传递Screen,只传递了Application。
      

  3.   

    “对于DLL,必须是libray中uses的第一个单元是ShareMem;对于使用该DLL的应用程序,必须是在program单元中第一个uses       ShareMem” 
    大富翁上面找到的,另外如果英文好,可以参考下这篇文章
    http://hi.baidu.com/jangill/blog/item/4ffa9f1bbe2bb4d2ac6e75af.html
      

  4.   


    因為dll和exe用的是各自獨立的bpl包,因而會產生各自的application及screen對象
      

  5.   

    由于你是使用sendmessage,所以與消息隊列是無關的。替不替換application沒關系。
    發送消息沒成功,一個比較大的可能性是,所獲得的handle不是目標窗口的handle
      

  6.   

    回楼上,我发送WM_CLOSE可以使窗口关闭!证明Handle是没错的!
      

  7.   

    不同的Screen,对于Sendmessage或者SetFocus(Handle)来说应该是没关系的,
    不过FindControl(Handle)来说可能会返回nil
      

  8.   

    想起來了,delphi vcl在獲得 激活窗體的消息後,會去維護screen這個對象。
    只要將主程序的screen對象搞到dll中去,即可達到目的