我想知道失去焦点的是谁,应该拦windows的哪个消息?(200分)

  • 主题发起人 主题发起人 WoDing
  • 开始时间 开始时间
我又来一个,还是不用消息,呵呵,这回点MOUSE也可以[:D]<br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, StdCtrls;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Edit1: TEdit;<br>&nbsp; &nbsp; Edit2: TEdit;<br>&nbsp; &nbsp; Edit3: TEdit;<br>&nbsp; &nbsp; ListBox1: TListBox;<br>&nbsp;private<br>&nbsp; &nbsp;FLastActive: TWinControl;<br>&nbsp;public<br>&nbsp; &nbsp;function SetFocusedControl(Control: TWinControl): Boolean; override;<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>function TForm1.SetFocusedControl(Control: TWinControl): Boolean;<br>begin<br>&nbsp;inherited SetFocusedControl(Control);<br>&nbsp;if Assigned(FLastActive) then<br>&nbsp; &nbsp;ListBox1.Items.Append(FLastActive.Name);<br>&nbsp;FLastActive := ActiveControl;<br>end;<br><br>end.<br>
 
to 东兰梦舞,<br>还是不行,连光标都看不到了。
 
呵呵,这次真的可以,不知还有没有其它的问题,<br>并且能不能讲一下原理,因为我不知道这个过程(事件)是谁(怎样)触发的,我笨,没办法的
 
to: savetime<br>我是说这种方式<br>procedure wmkillfocus(var msg:twmkillfocus);message wm_killfocus;<br>是行不通的<br><br>不过Application.OnMessage 也是行不通的,我不知道你的WM_PAINT消息是怎么截的<br>是控件的WM_PAINT??,WM_KEYDOWN肯定是可以的,因为是外部消息,经过消息队列处理<br>然后发给主程序的,所以是主窗口接收消息,所以能截获<br>
 
to 品梅小哥,<br>明白了,原来 WM_KILLFOCUS 是非进队消息。<br>WM_PAINT 是我的失误,因为 WM_PAINT 一直在被触发,我把它当成控件的消息了。
 
to savetime:<br>我在D6/D7都测试过,正常!
 
东兰梦舞, <br>请讲一下原理,因为我不知道这个过程(事件)是谁(怎样)触发的,我笨,没办法的 &nbsp;<br>另开帖子重谢!<br>另开帖子重谢!<br>另开帖子重谢!
 
我在 D7 WINXP 上测试还是不行,控件失去焦点的事件是正确的。<br>但是编辑框里的闪烁的插入符却不见了。还有谁测试也是正确的吗?
 
这个程序是DELPHI的TFORM调用的。<br>在发生窗体活动控件(有焦点控件)改变时调用。<br><br>其实,很多功能Tform都封装了,更多的了解,可以参阅Delphi的源文件forms.pas
 
我的是XP+D7,XP没有打什么补丁<br>测试基本通过,只是不明原理
 
原理回复了哦[:D]<br><br>另:用D7编译的程序,在2K,98SE,98,95OSR,95都测试了,正常……
 
基本上是明白了,SetFocusedControl是tform一个函数,谢谢<br><br>东兰梦舞, 为了表示对大家的积极参与这里的分就不发给你了<br>你还是到这里去领好了<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=2474299<br>最后谢谢大家的参与!
 
多人接受答案了。谢谢大家的支持!
 
后退
顶部