DelphiTObject消息的分发DisPatch和接受DefaultHandler
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DelphiTObject消息的分发DisPatch和接受
DefaultHandler
Delphi TObject消息的分发DisPatch和接受DefaultHandler Posted on 2011-07-12 11:02 ╰★张志峰★╮ 阅读(1029) 评论(0) 编辑收藏
在TObject类中,有一个Dispatch()方法和一个DefaultHandler()方法,它们都是与消息
分发机制相关的。
Dispatch()负责将特定的消息分发给合适的消息处理函数。
首先它会在对象本身类型
的类中寻找该消息的处理函数,如果找到,则调用它;如果没有找到而该类覆盖了TObject
的DefaultHandler(),则调用该类的DefaultHandler();如果两者都不存在,则继续在其基
类中寻找,直至寻找到TObject这一层,而TObject已经提供了默认的DefaultHandler()
方法。
unit Unit_MessageDispatch;
interface
uses Dialogs, Messages;
type
TMyMSG = record
msg : Cardinal;
msgText: string; //描述消息的类型
end;
TMSGAccepter = class //接受消息类
private
procedure AccepterMsg2000(var msg: TMyMSG); message 2000;
procedure AccepterMsg2002(var msg: TMyMSG); message 2002;
public
procedure defaultHandler(var message); override;
end;
implementation
{ TMSGAccepter }
procedure TMSGAccepter.AccepterMsg2000(var msg: TMyMSG);
begin
ShowMessage('嗨,我收到了编号为2000 的消息,它的描述是:' + msg.MsgText);
end;
procedure TMSGAccepter.AccepterMsg2002(var msg: TMyMSG);
begin
ShowMessage('嗨,我收到了编号为2002 的消息,它的描述是:' + msg.MsgText);
end;
procedure TMSGAccepter.defaultHandler(var message);
begin
ShowMessage('嗨,这个消息我不认识,无法接收,它的描述是:' + TMyMsg(message).MsgText);
end;
end.
unit UFrom_MessageDispatch;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit_MessageDispatch;
type
TForm_MessageDispatch = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_MessageDispatch: TForm_MessageDispatch;
MsgAccept : TMsgAccepter; // 自定义的消息接收类
implementation
{$R *.dfm}
procedure TForm_MessageDispatch.FormCreate(Sender: TObject);
begin
MsgAccept := TMsgAccepter.Create;
end;
procedure TForm_MessageDispatch.FormDestroy(Sender: TObject);
begin
MsgAccept.Free;
MsgAccept := nil;
end;
procedure TForm_MessageDispatch.Button1Click(Sender: TObject);
var
Msg : TMyMsg;
begin
// 将值为2000的消息分发给MsgAccept对象,观察其反应
Msg.Msg := 2000;
Msg.MsgText := 'Message 2000'; // 消息的文字描述
MsgAccept.Dispatch(Msg); // 分发消息
end;
procedure TForm_MessageDispatch.Button2Click(Sender: TObject);
var
Msg : TMyMsg;
begin
// 将值为2001的消息分发给MsgAccept对象,观察其反应
Msg.Msg := 2001;
Msg.MsgText := 'Message 2001'; // 消息的文字描述
MsgAccept.Dispatch(Msg); // 分发消息
end;
procedure TForm_MessageDispatch.Button3Click(Sender: TObject);
var
Msg : TMyMsg;
begin
// 将值为2002的消息分发给MsgAccept对象,观察其反应
Msg.Msg := 2002;
Msg.MsgText := 'Message 2002'; // 消息的文字描述MsgAccept.Dispatch(Msg); // 分发消息
end;
end.
分类: Delphi。