博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习VCL之路(1)
阅读量:4636 次
发布时间:2019-06-09

本文共 2590 字,大约阅读时间需要 8 分钟。

在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.

转载于:https://www.cnblogs.com/wangweifeng/p/7607456.html

你可能感兴趣的文章
C#将dll打包到程序中
查看>>
AJAX只支持字符类数据返回,不支持文件下载
查看>>
win10使用Composer-Setup安装Composer以及使用Composer安装Yii2最新版
查看>>
Python的装饰器
查看>>
人格差异
查看>>
安装 VMware Tools
查看>>
OpenFire源码学习之二十一:openfie对用户的优化(上)
查看>>
在ubuntu 12.04上安装tomcat 7.40
查看>>
数据库范式俗话
查看>>
mciSendString 多线程播放多首音乐 & 注意事项
查看>>
怎样实现一个简单的jQuery编程
查看>>
C#自定义Attribute的定义和获取简例
查看>>
LINUX内核之普通自旋锁
查看>>
python运维开发之第八天(socket)
查看>>
JAVA 数组元素的反转
查看>>
JavaWeb基础—dbutils的简单入门
查看>>
如今的移动操作系统,写在2013年——android篇 by 伊一线天
查看>>
vs2010快捷键
查看>>
1.three.js世界的4大要素
查看>>
数据结构与算法 Python语言描述 笔记
查看>>