如何删除另一个程序按钮上的焦点? ( 积分: 80 )

  • 主题发起人 主题发起人 ydopqi
  • 开始时间 开始时间
Y

ydopqi

Unregistered / Unconfirmed
GUEST, unregistred user!
我用WM_KILLFOCUS,怎么不起作用?
 
我用WM_KILLFOCUS,怎么不起作用?
 
SendMessage(btnWnd, WM_KILLFOCUS, 0,0);<br>怎么会不行呢?你用一个计时器杀其它窗口上的焦点试试。<br>如果是要取得其它程序上的焦点控件的句柄可以这样:<br>AttachThreadInput(GetCurrentThreadID, GetWindowThreadProcessID(Wnd,nil),true);<br> focWnd:= GetFocus; //一定要附加到线程上GetFocus才能有用<br>AttachThreadInput(GetCurrentThreadID,GetWindowThreadProcessID(Wnd,nil),false);
 
YuZi你好,我用它来删除记事本字体设置中“取消”按钮的焦点(ID:2),无效,KILLFOCUS后切换到字体窗口,虚线框仍然存在,没有变化,按下回车就退出了,其它程序无一例外。<br>我看了下说明,<br>wParam:含有接收输入焦点的窗口句柄(可能是NULL)<br>LParam:此参数未用<br>有点不明白,含有接收输入焦点的窗口句柄是指哪一个?父窗口?我都已经试过,没用,WM_SETFOCUS也有同样的说明,但用0也生效了。
 
其实已经使焦点清除了,你要这样试才看得出来,在窗体上放一个Timer,然后在OnTimer中写入 SendMessage($00020624, WM_KILLFOCUS, 0,0);,你再转到要清除焦点的其它窗口的上,看上面的按钮是不是随着Timer事件,一得到焦点就马上被KILL了。<br>而你那样试是因为窗口一被激活其中的TabOrder为0的控件会自动获得焦点,使你感觉上<br> SendMessage()好像什么也没做。<br><br>procedure TForm1.Timer1Timer(Sender: TObject);<br>begin<br> //假设$00020624是你已经取得的某一按钮的句柄<br> SendMessage($00020624, WM_KILLFOCUS, 0,0);<br><br>end;
 
不好意思啊。
 
多人接受答案了。
 
后退
顶部