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

我个人认为“根本不可行”!因为发送消息的怎么知道接收消息的适合响应什么样的消息呢?
判断?还是别的什么?总之,过于繁杂,不太可行。
 
是啊,所以我要通知消息接收者如何响应消息,但是-我要是每个接受者都定义如何处理这个动作,
那岂不一个一个重复?所以,我想只定义一个处理的动作,然后“指”给每个接受着,那样,
就无须每个都要定义如何响应了,vcl的子类当然可以响应在父类里定义的动作,但是我要为
不同的类定义接受某个消息都处理同样的动作,总不能每个类里都定义吧??(自定义的消息,
非基本的消息)
 
不不不,你这样不自由
 
我并不是讨论消息的发送和接受的问题,而是问及”消息指针“的可行性[:(]
仅仅是讨论一个object pascal的语法的实现的可能性啊!!
 
再说明一次:
我不是要解决广播消息如何接收的问题,而是和大家讨论是否有”Message Pointer"的
可行性,我觉得可能有类似的解决方案,或者根本不可行,而我还没有认识到,所以向大家
请教,多谢!:)
 
bluedog:
老大,用不着你怎么怎么怎么怎么说!不要把别人的智商想得这么低,你的方法肯定不可能实现
 
因为发送消息的一方和接收消息的一方,对接收方要执行什么,能否执行什么,怎么执行什么,
都没有一个主动的判断
 
语法实现,还用讨论吗?回调函数不就已经做到了吗?
 
to 小笨苯
如果有让您不快的地方,那我说抱歉。

再说一次,您对我的问题的理解和我想的不一样,看来是我表达能力有限,或者是我
智商太低,我只是讨论具体的可行性,不希望离开这个问题的范围。
 
关键字: 指针
 
bluedog:
哦,没有什么不快的[:)]
你再说一下,你所说的“消息指针”是什么意思?
 
有一种非常好的方法:
可以使用WH_GETMESSAGE钩子来钩住你自己的进程,然后在钩子处理过程中拦截指定的
消息,并加以处理。
你可以看看SDK、MSDN。
 
我再说说:
你要做的到底是消息还是事件??消息是消息,事件是事件,消息是系统中某件事情
发生了,你怎么去定义一个消息的变量??象POSTMESSAGE这样的处理消息函数有用到消息类型
的变量吗??我是第以次听说要定义一个消息类型的变量的。
事件其实指向过程的指针(不考虑类的因素的话),消息与事件是通过响应消息的类的
方法来连接的,比如一个响应指定消息的函数他做的事情可能仅仅是调用定义的事件。

我不知道我说的跟你要表达的是否再一个点上。希望以上所说的能给你的想法提供帮助!
 
函数指针的使用:

Type
TMyFunc = procedure(str:string);


procedure DoSomeThing(str: string);
begin
showmessage(str);
end;

procedure InvokeFunc(func: TMyFunc);
begin
func('Some function');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
InvokeFunc(@DoSomeThing);
end;

我就是这个意思,只不过希望把里面的DoSomeThing改为一个响应某个事件的过程。
 
借用楼上一位兄弟的回答:
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 wmkeydown(var _msg:tmessage);message WM_KEYDOWN;这个方法难道不是你
所要的东西吗?
 
to ReallyFail
大哥,我真的不是这个意思啊!!我不是要生成一个事件处理或者消息的发送接收啊!!
 
unit1

MyMessage = WM_User+1;

procedure DoSomething
--Message MyMessage ??如何表达??
//处理自定义的WM_User+1消息


unit2,unit3
//希望Form1,Form2处理自定义的MyMessage消息

//类似于Form1.ButtonCLick:= MyButtonClick;

Form1."MyMessage"(WM_User+1) := DoDoSomething
//如何表达??
Form2."MyMessage"(WM_User+1) := DoDoSomething;

我就是希望达到如此的效果,可否?
 
请注意,上面消息实现的代码和窗体Form1,Form2不在一个单元里!!
 
我还是希望您先看看这篇帖子:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1239318

:不在同一类(或单元)中事件过程的如何传递

谢了。
 
就是可否象传递函数、事件过程那样传递消息的处理过程??
 

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
顶部