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

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

例如我想给TEdit指定一个新的窗口过程,通过在新的窗口过程中检测是否是这个消息然后屏蔽,但是如何给Edit指定一个新的窗口过程呢?
...全文
108 6 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
Java编程语言一般是和重要的企业级应用程序联系在一起的,运行它们的服务器可能主位于蒙大拿的某个冰冷的机房里。不过,是桌面应用催生了Java,未来也必将是桌面应让Java能更加光彩夺目。通过AWT和现在的Swing,Java为编写图形化用户界面提供了丰富的客户端API。不过想要让Java、AWT和Swing达到最佳性能并不容易(也不方便),特别是在模拟交互式Web站点或像Windows XP和Mac OS X这样的操作系统外观时更是如此。\r\n 本书能帮助JAVA开发人员跳过Swing的基础节直接让桌面应用程序贴近现实。如果读者是一个Java开人员,并想开发带有一流外观的企业级应用程序,那就应该掌握Swing。不过对Swing的hack并不仅仅局限于对它的正常使用,而是关于一些读者或许要经过多年才能领会到的技巧。它们是一些富有创造性的、原创的甚至是诡异的hack,能让读者发出由衷的惊叹:“我可没想过居然能用Swing干这个!”\r\n 在本书中,读者将学到:\r\n 过滤不用的列表控件,对用户的输入做出合适的反应;\r\n 为列表和组合框组件提供拖放功能;\r\n 在图形组件之间实现动态效果,并能创建动态列表式界面;\r\n 控制任何方面,从鼠标指针到光标,乃至闪动键盘灯;\r\n 在Swing中构建分层、覆盖组件并灵活使用透明窗格屏蔽Swing接口内部的复杂细节和伸缩性。 ================================== 对学习SWING很有帮助!

1,183

社区成员

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

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