探讨一个窗口问题,MSN或者QQ的对话窗口,是不是一个独立的exe文件呢?这个窗口打开后,任务栏就显示出了,而打开MSN,QQ的模态窗口,不影响这个对话窗口。
我试验用一个delphi主程序显示这样的类似的对话窗口,但是打开模态窗口后,这个对话框就不动了。
这个独立的对话窗口,有时候很需要独立。用一个单独exe文件应该是没有问题的,这相当于两个独立的程序。是否有更好的方法呢?比如对话窗口用dll?

解决方案 »

  1.   

    最简单的方法,主程序禁止在任务栏显示,对话窗体放在Dll中,调用对话窗体的时候不要使用主程序的Application句柄,那么对话窗体就会出现在任务栏中了。
      

  2.   

    做成独立的exe也可以,不过不好控制
      

  3.   

    // 重载窗体的CreateParams过程:
    procedure TSubForm.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      // 设置窗体风格
      Params.Style := Params.Style or WS_OVERLAPPED or WS_SYSMENU;
      Params.ExStyle := Params.ExStyle or WS_EX_WINDOWEDGE or WS_EX_APPWINDOW;
      // 使用桌面做为父窗体
      Params.WndParent := GetDesktopWindow;
    end;
      

  4.   

    JPEXE你好,这种方法,不是qq或者msn使用的方法,因为在一个应用程序中,打开了该窗口,然后以后如果有showmodal窗口,这个窗口就动不了。而qq或者msn是可以动的,也就是说,与主程序“脱离”了。
      

  5.   

    用应该用Show,而不是ShowModal。
      

  6.   

    或者自己另写一个ShowModalEx(h: THandle),只作用于指定窗口,
    而不是像Delphi的原来那个ShowModal是作用于整个应用程序(Application)的。
      

  7.   

    谢谢。
    MSN的弹出窗口比如选项,设置之类的是模态的,弹出后,其它动不了。QQ弹出窗口是“独立”的,与其它的模块互不影响
      

  8.   

    很明显,就是JPEXE所说的那种。楼主你怎么知道用的是ShowModal而不是Show?
      

  9.   

    谢谢各位朋友,我再研究一下。
    以前用的是JPEXE的方法,这个窗口是监控服务器的数据的,需要在应用中显示,但是应用中,还需要经常打开模态窗口,因为show的话,用户经常忘记关,整个应用很混乱。showmodal的时候拿个监控窗口是不动了。