如何屏蔽控件的某个消息?

weixiaohua 2008-04-21 10:38:33
例如我想屏蔽修改控件Enabled属性的那个消息(WM_ENABLE),应该怎么弄呢?

例如我想给TEdit指定一个新的窗口过程,通过在新的窗口过程中检测是否是这个消息然后屏蔽,但是如何给Edit指定一个新的窗口过程呢?
...全文
125 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
接分先!
liangpei2008 2008-04-24
  • 打赏
  • 举报
回复
//这样不行?继承TEdit,Override其窗口函数

type
TmyEdit=class(TEdit)
protected
procedure wndProc(var msg:TMessage);override;
end;

procedure TmyEdit.wndProc(var msg: TMessage);
begin
if msg.Msg=WM_ENABLE then exit;
inherited;
end;
etomahawk 2008-04-24
  • 打赏
  • 举报
回复
方法好多。

1) 可以直接替换控件的消息过程函数。(适用于delphi所有控件。)
Label1.WindowProc:= MyWindowProc;

2) 利用子类化。(仅仅可处理从TWinControl继承下来的控件)
SetWindowLong(Edit1.Handle, GWL_WNDPROC, @MyWindowProc);

3) 特定消息可以使用SetMethodProp/GetMethodProp来替换。(所有控件,特殊消息)
....

在MyWindowProc中处理。

想了解其他的,参照我总结过的delphi消息截获:
http://etomahawk.popo.blog.163.com/blog/static/919644820071012111931592/
weixiaohua 2008-04-24
  • 打赏
  • 举报
回复
试过了不行!
liangpei2008 2008-04-22
  • 打赏
  • 举报
回复

//1.Override一下Form的WndProc
//2.对WndProc中的消息进行过滤
function WndProc(............);
begin
case msg of
WM_XXX:新处理过程;

end;
Inherited;
end;
zhu_gx 2008-04-21
  • 打赏
  • 举报
回复

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧