关于窗体底层显示的问题(50分)

  • 主题发起人 主题发起人 幸福人生1
  • 开始时间 开始时间

幸福人生1

Unregistered / Unconfirmed
GUEST, unregistred user!
我想让我的窗体永远在所有打开的窗体的最底层,而且点“显示桌面”按钮或WIN+D也不能最小化,就好像把那个窗体当成桌面的一部分一样,应当怎么做?
 
怎么没人愿意帮一下吗,在DFW里查了一上午资料找的都不全,不能完全解决。别让问题沉了啊
 
use SetWindowPos
 
刚试了下,想在按win+D也仍然显示在桌面上.....难<br><br>如果设置窗体永远在最前可以办到,但是设置窗体始终在最下时,哪个方法却不行<br><br>找原来的资料没有线索,自己想了想,找到个凑合能用的方法:<br>在一般情况下,按win+d 或则显示桌面按钮,或者最小化都仍然显示<br>但是,如果当前焦点是桌面,或者桌面上的图标就不行了<br>关键是win+d 或者显示桌面 似乎并没有发什么消息,只是重画了下桌面,然后把焦点给桌面而已<br><br> &nbsp;TForm1 = class(TForm)<br> &nbsp; &nbsp;ApplicationEvents1: TApplicationEvents;<br> &nbsp;private<br> &nbsp; &nbsp;{ Private declarations }<br> &nbsp; &nbsp;Procedure CreateParams(var Params: TCreateParams);OverRide;<br> &nbsp; &nbsp;procedure SetPos(var msg: TWMWINDOWPOSCHANGED); message WM_WindowPosChanging;<br> &nbsp;public<br> &nbsp; &nbsp;{ Public declarations }<br> &nbsp;end;<br><br>var<br> &nbsp;Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.SetPos(var msg: TWMWINDOWPOSCHANGED);<br>begin<br> &nbsp;msg.WindowPos.hwndInsertAfter:=1;<br>end;<br><br>Procedure Tform1.CreateParams(var Params: TCreateParams);<br>var<br> &nbsp;h:hwnd;<br>Begin<br> &nbsp;inherited;<br> &nbsp; &nbsp;//关键是下面这2句<br> &nbsp; &nbsp;h:=findwindow(nil,'Program Manager');<br> &nbsp; &nbsp;params.WndParent:=h;<br>end;
 
hs-kill大哥,你真是太厉害了,一下子搞定了,帮我大忙了,省了我不少时间,我真是太谢谢你了!!!但有个问题是只有当窗体处于激活状态时代码才起作用,我想得用HOOK,不然不能全局控制
 
希望大家继续讨论!!!谢谢
 
?激活状态代码才起作用? 哪些代码?
 
也就是说当焦点在此窗体上时,按WIN+D或“显示桌面”都不会最小化,可焦点不在时,按WIN+D或“显示桌面”也会最小化。 &nbsp;还有ApplicationEvents1: TApplicationEvents;<br>这个类在我这里不认识。我就把它删了。不知道会不会影响效果。(我用的是D7)
 
恩? 我刚试了下,只要焦点不在桌面或者桌面的图标上,按win+D都不会最小化啊<br><br>那个TApplicationEvents;没用了....本来想靠他截获win+D的消息的,结果发现没有消息
 
不是“只要焦点不在桌面或者桌面的图标上,按win+D都不会最小化”而是只要当那个窗体的标题栏是灰色的,它就能被最小化。你可以在试试看。<br>我想要的效果是:窗体好像是桌面背景的一部分一样,不管怎么样都不能最小化,但可以随意拖动。<br> 大哥帮人帮到底,告诉我这样的功能怎么实现行吗?
 
大哥,不用了,我自己解决了。照样谢谢你!!!
 
哦? 奇怪 我只用上面的代码 窗体是灰色的时候 除非焦点在桌面上,否则都不会被最小化啊....<br>你用的delphi几?我用的是D7<br><br>还有 你怎么解决的? 这个问题好久都没答案,现在有点突破了,把所有方法都共享下,以后其他人也有这个需求的时候也好有个方向
 
我用的也是D7;<br>我用的方法有点不正规,呵呵!别见笑!<br>其实很简单,就是再放一个ApplicationEvents组件,在她的OnDeactive事件里写一句<br>form1.Show;就行了。<br>不过这有个缺点,就是你不能选定桌面的其他图标了(双击除外);
 
晕...........
 

Similar threads

后退
顶部