有没有消息指针??或者说把消息处理的过程象函数指针那样传递?(200分)

B

bluedog

Unregistered / Unconfirmed
GUEST, unregistred user!
传递函数、传递事件的处理过程,都可以,但是我不知道可不可以实现以下功能:
//把某个消息处理过程指到需要的地方
在某处定义一个处理消息的类型:
  type
TMyMessage = procedure...... Message //该如何写?:)

  var
GetMessage: TMyMessage;

implematition
procedure GetMessage(..);
begin
....
end;

然后假设Form1可以TMyMessage类型的消息,我能否象函数指针那样把GetMessage处理过程
传递给Form1,让GetMessage来响应Form1的TMyMessage类型的消息呢??

我的想法是假设很多Form都要响应某个消息,处理过程也一样,我在一个地方写好消息的
处理过程,然后一次性地指给所有的窗体,让他们都响应(只是就此问题假设,方便大家
明白我的意思,并不是要解决这个问题:)(要解决类似的问题,那我直接用窗体继承了)

有没有可行性?
 
少了几个字:
“然后假设Form1可以接收TMyMessage类型的消息”
 
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure wmkeydown(var _msg:tmessage);message WM_KEYDOWN;
public
{ Public declarations }
end;

procedure tform1.wmkeydown(var _msg:tmessage);
begin
inherited;
if (_msg.wParam=VK_TAB) then
showmessage('TAB be pressed!');
end;

我不知道你说得意思是不是!!!???
 
不是。
关键字:函数指针 消息 “指针”
 
Delphi 规定,所有的消息处理过程都必须是某个类的成员,
不能是普通的过程.
 
to xeen:
对一个事件处理过程来说,它不需要必须是某个类的成员,你可以在任何地方定义一个
事件处理过程,然后指给某个需要响应此事件的对象(当然,你要传递此对象到事件处理
过程里,请参见TMethod的定义和用法)
而对于消息来说,我不能确定。

期待大家的发言!!
 
[red]对一个事件处理过程来说,它不需要必须是某个类的成员?[/red]
你从哪里看到的?
 
我以前问过同样的问题(关于事件赋值),后来看到:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1239318

 
你可以在任何地方定义一个事件处理类型的过程,然后你可以赋给任何需要的地方,不需要
关联到某个具体的类的。

请继续我的“消息指针”的问题,等待高见!!:)
 
Message不是一个过程,是个记录类型,消息的定义在DELPHI中的代码是这样的:
TMessage = packed record
Msg: Cardinal;
case Integer of
0: (
WParam: Longint;
LParam: Longint;
Result: Longint);
1: (
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
end;
你说的可能是事件,事件类型可以这样:
TCloseEvent = procedure(Sender: TObject
var Action: TCloseAction) of object;
不知道我有没说到点子上!
 
你专门定义个处理消息的类好了,在此类上定义消息处理函数.
此类在所有Form对象创建之前创建.
 
我个人认为:不管是Windows的消息循环,还是Delphi的消息循环,都是一整套复杂的体系结构,
都没那么简单。
所以,你最好还是直接将你要实现什么功能说出来吧
 
翻书的时候突然想到了这个问题,没想实现什么功能,只是考虑这个想法而已,要说
要实现什么功能,那就是“消息指针”:)[:D][8D]
 
bluedog:
呵呵,当科学家,发明家的材料[:D][:D]
>>我的想法是假设很多Form都要响应某个消息,处理过程也一样,我在一个地方写好消息的
>>处理过程,然后一次性地指给所有的窗体,让他们都响应
就这个功能,广播消息就能实现
 
补充一个:定义一个消息的变量这种事有什么用吗??
 
to ReallyFail:
请参考过程变量的意义。
 
to:小笨苯
我不是要广播的意思,假如我广播了某个自定义的消息,那接受者也要有处理此消息的
动作啊,消息是广播了,每个人都接收了,但是他不知道如何处理此消息啊!:)[8D]
 
这样描述吧:
领导说:今晚我们去xx!!!
大家都收到了这句话,但是,“xx”究竟是什么意思??是吃饭?跳舞?还是......:)
于是,领导的小密跑来说:xx就是去yy!!!
问题在于,小密是一个一个通知该如何做,还是把大家叫来一起说??


 
我广播了一个自定义的消息,难道还要在每个接收者里写同样的处理动作??
如果有个“消息指针”,我在某处写好对此消息的处理动作,然后,就类似
于: Form1.Button1OnClick := MyOnClick 一样,给每个接收者的此消息
处理赋此值,那么就方便了!
 
再说明一次:
我不是要解决广播消息如何接收的问题,而是和大家讨论是否有”Message Pointer"的
可行性,我觉得可能有类似的解决方案,或者根本不可行,而我还没有认识到,所以向大家
请教,多谢!:)
 

Similar threads

S
回复
0
查看
950
SUNSTONE的Delphi笔记
S
S
回复
0
查看
774
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部