如何设计一个窗体,使它总位于最上面,并且点击时不会获得焦点?(100分)

  • 主题发起人 主题发起人 happydelphi
  • 开始时间 开始时间
H

happydelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
是否必须用winapi来实现,能否用vcl实现?具体代码?<br>如何在此窗体上生成speedbutton控件?[?]
 
4.1、设置窗体为"StayOnTop"风格. <br><br>SetWindowPos(Form1.handle, HWND_TOPMOST,<br>Form1.Left, Form1.Top, Form1.Width, Form1.Height,0);<br>这里的Form1为你的窗体的名字<br>4.2、设置窗体为正常的、非Topmost风格<br>SetWindowPos(Form1.handle, HWND_NOTOPMOST,<br>Form1.Left, Form1.Top, Form1.Width, Form1.Height,0);<br><br><br>SetWindowPos(handle, hwnd_TopMost, 0, 0, 0, 0, swp_NoMove or swp_NoSize);<br>推荐!<br>
 
回答第二个问题<br>&nbsp; private <br>&nbsp; &nbsp; { Private declarations } <br>&nbsp; &nbsp;procedure WMMouseActivate(var Msg: TWMMouseActivate); message WM_MOUSEACTIVATE; <br>&nbsp; &nbsp;procedure WmNCHitTest(var Msg :TWMNCHitTest); message WM_NCHITTEST;<br>&nbsp; End;<br>...<br>procedure TForm1.WMMouseActivate(var Msg: TWMMouseActivate); <br>&nbsp;begin <br>&nbsp; Msg.Result := MA_NOACTIVATE; <br>end; <br><br>procedure TForm1.WmNCHitTest(var Msg: TWMNCHitTest); <br>begin <br>&nbsp; DefaultHandler(Msg); <br>&nbsp; if Msg.Result = HTCAPTION then <br>&nbsp; &nbsp; Msg.Result := HTNOWHERE; <br>end; <br><br>
 
我提的问题最关键的是如何让它在鼠标点击时不获得焦点,谢谢关注!<br>如果必须用api写,请写出代码。
 
&nbsp; &nbsp;变态!窗体不获得焦点,想怎么用?干脆不如这样:<br>&nbsp; &nbsp; procedure TForm1.FormClick(Sender: TObject);<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; Self.Enabled:=False;<br>&nbsp; &nbsp; end;
 
出个烂主意:<br>做好你要的FORM,设为StayOnTop,wsMaximized<br>在你不想让别人按的按钮上,盖上一层同名的Panel
 
在适当的时机<br>用<br>sendmessage(handle,wm_killfocus,0,0);<br>哈哈
 
to 御键飞天:<br>&nbsp; &nbsp; 不获得焦点的窗体当然有用,在上面放上speedbutton就可以模拟键盘输入了,而且<br>不会夺走记事本或其他需要输入文字的窗口的焦点。<br>to 小黄鱼:<br>&nbsp; &nbsp; 说的太笼统了,我也知道有可能这样,但是无法实施。
 
那你还不如建一个后台,查找需要的窗体和控件,然后PostMessage(键盘事件)
 
delphi里面有没有和vc中pretranslatemessage虚拟函数功能近似的函数?
 
use THintwindow.
 
后退
顶部