【发布时间】:2018-09-08 14:31:33
【问题描述】:
每当WM_GETOBJECT 消息发送到表单上的任何TWinControl 时,我都面临着一项艰巨的任务。
- 每个面板
- 每个嵌套面板
- 每个编辑框
- 每个组合框
- 每个按钮
- 每个工具栏
- 每个日期时间选择器
- 每张图片
- 每个列表视图
- 每一棵树
- 每一次胜利控制
- 在每个表单上
显然我不希望每个控件都单独子类化:
- 很难正确执行(可能人们在想要开始子类化时使用 SetWindowSubclass,在完成时使用 RemoveWindowSubclass,却没有意识到他们的崩溃刚刚介绍)
- 是difficult to do correctly
- 它需要单独对每个控件进行子类化,可能通过子控件迭代函数(如果您在创建表单句柄时应用它并在销毁表单句柄时删除它们,则会出现失败的常见错误)
有没有办法参与处理使用 SendMessage
直接发送到子控件的每条消息- 类似于 TApplicationEvents.OnMessage 可以拦截每条发布的消息
- 类似于 KeyPreview 允许表单查看每个发送 Key 消息的方式
【问题讨论】:
-
列举孩子。使用 WndProc 拦截消息。
-
@DavidHeffernan:我想你的意思是
WindowProc。但这仍然需要单独对每个控件进行子类化,并且当您有很多控件要子类化时,这会变得很棘手。
标签: delphi delphi-xe6