从TObject直接继承的对象怎么进行消息收发和处理?(200分)

  • 主题发起人 主题发起人 blackbeam
  • 开始时间 开始时间
B

blackbeam

Unregistered / Unconfirmed
GUEST, unregistred user!
TForm类有WndProc和消息处理函数,也可以SendMessage发送消息,如果是从非窗口类
继承的自定义类,如何实现同样的功能?
 
直接继承自TObject的类是不能接受消息的, 但是SendMessage PostMessage发送消息是不
受限制的, 因为这两个方法是全局的API调用. 所以想要处理消息最好是用TWinControl继
承过来的. 至少要从TControl继承过来, 因为TControl是可视类的, TControl的Parent会
把消息转给TControl.

如果你坚持要用TObject类处理消息, 你可以用做一个TWinControl容器, 把你的不可视的
Object都放到这个容器里面, 容器接到消息后在分发给你自己的对象去作相应的处理. 不
过这样做很麻烦的, 你要给你的这些类加上消息处理机制, 搞下来也就跟TControl差不多
少了..
 
参考ttime
 
可以接受消息的: DELPHI有allocateHWND这个隐藏函数.
 
请问吴剑明,哪里有这方面的资料?
 
perform试试
 
听课学习~
 
这个是没有资料的。:)
你在DELPHI的目录下搜索一下,可以找到这个函数的。我忘了在哪个单元里了。
该方法有个消息方法的参数,你声明他就是。返回一个句柄,你对这个句柄发消息,
这个对象就能收到你的消息了。
 
可以,你需要override Tobject 的DefaultHandler 虚方法.

procedure DefaultHandler(var Message)
virtual;
 
多人接受答案了。
 
这个问题虽然已经结束了,但是我还要说明一点。

TObject,TPersistent,TComponent这三个基础类是不能处理消息的。虽然TObject就有
DefaultHandler这个方法,可是里面的内容是空的,同样TPersistent,TComponent也没
都没有消息处理的任何代码。一直到了TControl才引进了WndProc这个方法来处理的消息。
所以TControl之前的任何类的DefaultHandler方法,只是一个空架子不处理何消息。


 
huizhang: 你的观点是错的. 原因我在上面已经说明.从TOBJECT下来的类都可以接受消息.
想都不用想的:
如果TOBJECT不能实现接受消息,那么他下面的类是怎么接受消息的呢?
肯定有方法实现的,所以他下面的类就实现了接受消息的功能了.
 
后退
顶部