各位大虾,我想实现把窗体置顶,就是其它程序的窗口也不能覆盖它,有点类似于Windows的任务管理器的窗口,但我想即使是按Windows+D 这样的组合键也不能将窗口最小化。给提点建议了...

解决方案 »

  1.   

    再最前面最简单可以设置formstyle属性为fsStayOnTop
    至于想控制windows+D的键盘事件,你就必须做键盘钩子截获windows消息了。
      

  2.   

    如果你需要我可以帮你做一个低级键盘钩子的dll封住win键+D键。呵呵
      

  3.   

    在application.OnDeactivate事件里写如下语句就成了:
      SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);  // 设置窗口在最上面
      SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_SHOWWINDOW);  // 显示窗口
      

  4.   

    To xixuemao(吸血猫) 
       先谢了!
      

  5.   

    To kongguangming(Fly) 
      所说的“拦截隐藏消息”是什么意思?没看明白,能详细解释一下么?
      

  6.   

    To Idle_(阿呆) 
      你的方法只能保证单一窗体时,可以处于最顶,并且不能屏蔽Win键+D 的组合键,仍然谢谢!
      

  7.   

    试过没? 别瞎说哦
    我测下来在整个程序最小化时都能将form2显示在最上面, 甚至在form2.hide后也可以显示出来(只要当前程序失去焦点), 谁说只能保证单一窗体的?看清楚, 不是form.OnDeactivate事件哦, 是application.OnDeactivate事件.
      

  8.   

    To xixuemao(吸血猫)
      不行啊,程序有错误,我先调一下看看。
      

  9.   

    本身dll文件没错误,我已经试过了。。是你的windows.pas里没有定义那个常量和结构,我可以把编译好的windows.pas和windows.dcu发给你。就没问题了。
      

  10.   

    To Idle_(阿呆)
      我试过了,但是没用啊,要不你给我你的提供个联系方式我把测试程序给你,你看看,谢谢!
      

  11.   

    已经发了,不用改我的dll代码,我都是测试过才给你发的你把这两个文件替换掉,就可以了。新建一个工程,测试一下吧。
      

  12.   

    最简单可以设置formstyle属性为fsStayOnTop
      

  13.   

    To xixuemao(俺可是㊣②㈧经儿滴人)
      还是不行,我把测试程序回复到你邮箱里,帮我看看吧,谢谢!
      

  14.   

    OK 问题解决了!
    解决方法
    用Idle_(阿呆)介绍的API函数SetWindowPos 并且将需要置顶的Form的FormStyle设为fsStayOnTop。
    不过用xixuemao(俺可是㊣②㈧经儿滴人)的方法确实可以解决Win键+D 组合键的问题。谢谢大家结帖了。