我在程序启动时,加了一线程显示另一个子窗体,因为显示了该子窗体后,主窗体不能被激活,因此我在线程中用showmodal显示该子窗体,但是发现显示后,主窗口还是可以激活。这是怎么回事?难道线程中的窗体用showmodal显示,并不会影响到主窗体吗?
那该如解决?还请高手们指点,谢谢!

解决方案 »

  1.   

    用线程的waitfor()方法等次线程完成。
      

  2.   

    不要在线程中调用 ShowModal
    ShowModal伪实现代码如下:repeat
      PeekMessage;
      TranslateMessage;
      ...
      DispatchMessage
    until ...PeekMessage取的是当前线程的消息队列。你把ShowModal函数放在线程中调用,那么它取不到主线程
    的消息,也无法过滤,处理主线程消息。因此模块窗口的特性无法体现出来了。
      

  3.   

    哦,那是否有其他办法做到呢?如果用waitforsingleobject函数
    我在窗体的oncreate事件中加入
    var
      handle:THANDLE;
    begin
      handle:=CreateThread(nil,0,@threadproc,nil,0,threadid);
      WaitForSingleObject(handle,INFINITE);
    end;
    这样加入后,主窗体一直不能显示出来。子窗体也没有显示出来,并且程序没有报错。还请指点,谢谢!
      

  4.   

    你可以自定义一个消息。
    辅助线程中通过发送消息给主窗口。主窗口收到消息后,ShowModal窗口。
      

  5.   

    不要在线程中调用 ShowModal