测试程序: 
4个窗口,Form1 ----> 主窗口
        Form2,Form3---->普通窗口,非模式运行
        Form4  ----->模式窗口程序启动 Form1,可点击菜单 分别打开 Form2.show  和 Form3.show 
   此时,可以任意在 Form1 , Form2, Form3 之间切换窗口操作,
若点击Form2上的按钮,打开 Form4.showModal
出现不解的问题现像, Form1 , Form2, Form3 三个窗口全部挂起,不能切换了.通常MS开发的程序中(VB,C#),应该是 Form2上面 进行 Form4.showModal 哪么应该只挂起 Form2.也就是说可以继续操作 Form3 和 Form1 ,只有 Form1(应用程序主窗口)上激发的模式窗口或对话框才挂起所有窗口.
对Delphi不熟,不知道如何处理以实现 Form2 激发的模式窗口或对话棋框,只挂起Form2,而不是挂起整个应用程序.

解决方案 »

  1.   

    try
          SendMessage(Handle, CM_ACTIVATE, 0, 0);
          ModalResult := 0;
          repeat
            Application.HandleMessage;
            if Application.FTerminate then ModalResult := mrCancel else
              if ModalResult <> 0 then CloseModal;
          until ModalResult <> 0;
    ShowModal的部分代码,
    从代码里看到DELPHI里的模态窗体是接管了程序的消息循环
    直到给窗体ModalResult 一个值才会把消息循环交还给Application
    所以在操作模态窗体的时候是没办法操作程序里的其他窗体的!
      

  2.   

    因为Form4是静态生成的,它的Owner是Application,改为动态建立Form4,Owner为Form2就行了
      

  3.   

    使用 EnableWindow(hWnd: HWND; bEnable: BOOL);将所有要可用的窗体都enable..