如何让我的窗体得不到焦点,并一直在最上层显示呢?(100分)

  • 主题发起人 主题发起人 Delphi哈哈
  • 开始时间 开始时间
例如,<br>启动我的程序后,最小化到托盘,<br>然后做别的事,我正在用记事本打字,这时我的窗口自动弹出来了,但是焦点仍在记事本上,<br>而我的窗口却显示在最上层
 
将窗体<br>&nbsp;Enabled 设为 False &nbsp;//设置窗口不能用,即得不到焦点<br>&nbsp; FormStyle 设为 fsStayOnTop &nbsp;//这样窗口将居于上方<br><br>给出一个窗口的DFM文件内容:<br>object Form1: TForm1<br>&nbsp; Left = 192<br>&nbsp; Top = 107<br>&nbsp; Width = 544<br>&nbsp; Height = 375<br>&nbsp; Caption = 'Form1'<br>&nbsp; Color = clBtnFace<br>&nbsp; Enabled = False &nbsp;//设置窗口不能用,即得不到焦点<br>&nbsp; Font.Charset = DEFAULT_CHARSET<br>&nbsp; Font.Color = clWindowText<br>&nbsp; Font.Height = -11<br>&nbsp; Font.Name = 'MS Sans Serif'<br>&nbsp; Font.Style = []<br>&nbsp; FormStyle = fsStayOnTop &nbsp;//这样窗口将居于上方<br>&nbsp; OldCreateOrder = False<br>&nbsp; PixelsPerInch = 96<br>&nbsp; TextHeight = 13<br>end
 
这样就没上面这么简单了
 
这样可以在最上方,但是他仍然获得了焦点。
 
在显示时找到记事本的句柄,再设焦点在记事本上
 
我有例子,本来打算作联众台球瞄准期的,后来因为毕业工作进入试用期,<br>没时间,给我发邮件吧,txyqbf_GXX@163.com, 给我写邮件说明要什么东西<br>要么我就忘记了
 
哦, 忘记说明了,我的程序类似于foxmail的 提示窗口<br>不知道 &nbsp;是否适合你的需要
 
做个动作。<br>先记下当前的操作,然后切换出来,再切换过去。
 
需要捕捉 WM_MOUSEACTIVE 消息:<br>
代码:
<br>procedure TForm1.WMMouseActivate(var Message: TMessage);<br>begin<br>&nbsp; Message.Result := MA_NOACTIVATE;<br>end;
<br><br>另外,显示时不要用 Show,用如下代码:<br>
代码:
<br>SetWindowPos(Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0,<br>&nbsp; SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_SHOWWINDOW);<br>
<br>隐藏使用:<br>
代码:
<br>SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0,<br>&nbsp; SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_HIDEWINDOW);<br>
<br><br>qiuliang<br>http://qiuliang.mycool.net
 

Similar threads

回复
0
查看
816
不得闲
回复
0
查看
874
不得闲
回复
0
查看
827
不得闲
回复
0
查看
992
不得闲
后退
顶部