我有多个窗口,需要依照一定的次序显示在最上面,目前实现方法:
最外面的窗口采用:
SetWindowPos(最上层的那个窗体的handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE)
其余窗口用循环一次叠放到下面,
SetWindowPos(当前窗体的handle,上一个handle,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE)程序启动的时候没有问题。但是和其他程序窗口切换后,只剩下一个窗口保持在最前面了,也就是第一个窗口。
请教各位,是否可以实现这一组窗口在和其他程序切换的过程中,始终按照这个次序保持在最上面呢?谢谢关注。

解决方案 »

  1.   

    你将命令放在OnShow里,还是放在OnCreate里?
    放在OnShow里试试
      

  2.   

    OnShow,OnCreate都试过;
    SetWindowPos(handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE   or   SWP_NOSIZE) 无效,我是在主窗体用Timer一直调用的。
    只能保持第一个窗体在最上面,其余的窗体都没有叠放成功,
    另外我看到“千千静听”等等播放器倒是达到这个效果了。
    设置为总在最上面后,播放列表,均衡器,主界面的叠放次序都能在切换任务的时候很好的保持住。
      

  3.   

    在工程的主窗体中放置一个TApplicationEvents组件, 然后在它的OnDeactivate事件代码中写入:procedure XXXX.ApplicationEvents1Deactivate(Sender: TObject);
    begin
      SetWindowPos(Handle1, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
      SetWindowPos(Handle2, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
      ......
      SetWindowPos(HandleN, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
    end;