delphi:
我的模式化窗体中调用com,此com中弹出一个对话框,但是我不能对这个对话框进行操作,因为模式化窗体占用焦点,如何让这个模式化窗体失去焦点呢?

解决方案 »

  1.   

    我的情况是这样的,
    com组件里有个Form,我在页面上调用这个form,让它Show或者ShowModal,
    这两种方法的效果如下:
    show时,页面卡死
    SHowModal,页面显示查询都很正常,但是弹出对话框时获取不到焦点,各位帮帮忙
      

  2.   

    可以考虑使用TableDialog 当a获得焦点,b.show ,mdiform 
    当a失去焦点unload b 
    --------------------------------------------------------------------------------
    这个问题第4个回答:
    我做过这个。给楼主一个思路,楼主按照这个自己实现看。 除了你说的效果,你还要实现的是:a的父窗体最小化时,b也跟着一起最小化。(这个虽然不是必须,但按理讲应该是需要的)。 
    设a的父窗体为p,所有的处理都在p的WM_ACTIVATE消息中。 
    在b加载和卸载时,都通知p,并把b的hWnd储存在p的一模块级变量中。 
    Case WM_ACTIVATE        Select Case LowWord(wParam)        Case WA_ACTIVE, WA_CLICKACTIVE            If g_hWndDlgBox <> 0 Then Call SetWindowPos(g_hWndDlgBox, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE)        Case WA_INACTIVE            If g_hWndDlgBox <> 0 Then Call SetWindowPos(g_hWndDlgBox, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE)        End Select        If HighWord(wParam) <> 0 Then            If g_hWndDlgBox <> 0 Then Call ShowWindow(g_hWndDlgBox, SW_HIDE)        Else            If g_hWndDlgBox <> 0 Then Call ShowWindow(g_hWndDlgBox, SW_SHOW)        End If
    但是如果想让窗体A一直处于窗体B的上面,B最小化A也跟着最小化有两个方法: 
    B.show,A 
    或者 
    setwindowlong B.hwnd,GWL_HWNDPARENT,A.hwnd