在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.
|
请发表评论