急!如何使一个Form总是在所有程序的最顶端 ( 积分: 50 )

  • 主题发起人 主题发起人 Michael_zhu
  • 开始时间 开始时间
M

Michael_zhu

Unregistered / Unconfirmed
GUEST, unregistred user!
先描述一下我的程序,我的程序是一个对话框程序,打开主界面后,点击一个按钮,弹出FORM1(我用的是FORM1.SHOW)无模式对话框,我现在是想让这个FORM1一直处于窗口最顶层,我试了修改Formstyle:=fsStayOnTop,用SetWindowPos(此函数用在OnCreate事件中的)都不行,我该怎么办?<br>我的系统是XP SP2 + D7
 
先描述一下我的程序,我的程序是一个对话框程序,打开主界面后,点击一个按钮,弹出FORM1(我用的是FORM1.SHOW)无模式对话框,我现在是想让这个FORM1一直处于窗口最顶层,我试了修改Formstyle:=fsStayOnTop,用SetWindowPos(此函数用在OnCreate事件中的)都不行,我该怎么办?<br>我的系统是XP SP2 + D7
 
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE); 也不行吗?
 
不用写代码<br>可以在Form的窗口属性中改为 alwaysontop
 
这个问题不是那么简单的.<br>如果你只想在调用的那一时刻让界面在最上面,只需要设置alwaysontop就可以了!<br>但是如果你想让界面一直放在最上面,几乎是不可能的.如果你的程序是最上面显示,这是又有一个程序也是最上面显示那最上面的应该是最后一个程序!
 
我在网上找了很久也没解决这个问题,但我看到有的软件实现了这个功能的,比如很多桌面管理软件
 
用timer,<br>SetWindowPos(Handle,hwnd(-1), 0, 0, 0, 0, 3);
 
楼主试一下这一段<br>try<br> &nbsp;try<br> &nbsp; &nbsp;setactivewindow(mainf.handle); //强制设为当前活动窗口<br> &nbsp;except<br> &nbsp;end;<br> &nbsp;try<br> &nbsp; &nbsp;BringWindowToTop(mainf.handle); //将当前窗口强制置到顶层<br> &nbsp;except<br> &nbsp;end;<br> &nbsp;try<br> &nbsp; &nbsp;SetForegroundWindow(mainf.handle); //强制将当前窗口所属的线程置为前台程序 <br> &nbsp;except<br> &nbsp;end;
 
只能用定时器做,几秒钟检测一下,然后就置顶,我们做Windows下面的POS收款程序,就这样弄得.然后做一个全局变量,限制这个Timer启用与否,因为你调试的时候,这个很烦的[:D]
 
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);<br><br>这个是正解<br><br>用timer定时刷新即可<br><br>SetWindowPos(form1.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
 
一定要用API函数.<br>西宁森凯软件开发有限公司
 
你換個操作系統試一試。
 
后退
顶部