怎样给控件加上OnLostFocus事件? 急!!!(100分)

  • 主题发起人 主题发起人 mjt
  • 开始时间 开始时间
M

mjt

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi里面没有OnLostFocus事件, 只有一个OnExit. 但是OnExit只在本窗体
中有效, 当窗体切换的时候该事件没有被触发. 我想加上一个OnLostFocus事
件, 就如同VB中的OnLostFocus那样.

我继承了一个TEdit, 并且加上了一个OnLostFocus事件, 可是根本没有反应,
如果把 message 改成 CM_Exit 就好用. 谁能帮帮忙?

procedure CMLostFocus(var Message: TCMLostFocus); message CM_LOSTFOCUS;
procedure TMyEdit.CMLostFocus(var Message: TCMLostFocus);
begin
if Assigned(fOnLostFocus) then fOnLostFocus(Self);
end;
 
不同窗体间切换可以用TForm.OnDeactivate事件。
 
通过发送消息:

//移往下一个控件
SendMessage(Handle, wm_NextDlgCtl, 0, 0);

//移往上一个控制件
SendMessage(Handle, wm_NextDlgCtl, 1, 0);

OK? ^_^
 
just use onexit event and TForm.Deactivate//perhaps spell mising
 
这个OnLostFocus确实很必要, 比如说前几条有人要做下拉式TreeView就需要用到
这个事件. 可是Delphi中就是没有, 真是令人失望. 我的感觉是VB有的Delphi一定
要有, VB没有的Delphi也要有才行. Delphi里面的CM_LostFocus消息确实没有任何
反应.
 
欢迎大家来讨论这个问题。
 
你可以试试,然后判断是否某控件焦点变化 :
(关于CM_LostFocus 的确有点问题,我再试试)
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
Procedure cmFocusChanged(var msg:TcmFocusChanged);message cm_FocusChanged;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
Procedure TForm1.cmFocusChanged(var msg:TcmFocusChanged);
begin
label1.Caption:=msg.sender.Name;
end;

end.
 
此问题看来无解, 望斑竹把分数还给我吧
 
我觉得这挺有趣的,呵呵,会长:为什么会这样呢?一定要有呀
 
这个问题要从根上解决必须得修改TCustomForm的源码, 当Form Deactivate的时候
循环激发下属Controls的OnExit事件才行.
 
mjt:

这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者选择继续讨论或结束
问题。关于本版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。请提问者尽
可能自己处理自己的问题。这是您的权利,也是您的
义务。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 
多人接受答案了。
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
906
SUNSTONE的Delphi笔记
S
后退
顶部