学习VCL之路(1)
在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.
学习VCL之路(1)的更多相关文章
- [转载]AxureRP学习成长之路
[编者按]本文作者@朱军华Ronzhu , 本文借用官网的描述定义,介绍了在学习AxureRP过程当中所要经历的各个阶段,也结合了作者自身学习AxureRP使用的经验,讲一下在各个阶段中的一些学习方法 ...
- 学习WCF之路,长期更新
我学习WCF之路:创建一个简单的WCF程序 为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本 ...
- 学习 Webpack5 之路(优化篇)
一.前言 从 0 到 1 学习的朋友可参考前置学习文章: 学习 Webpack5 之路(基础篇) 学习 Webpack5 之路(实践篇) 前置文章 学习 Webpack5 之路(基础篇) 对 webp ...
- 小白学习Python之路---开发环境的搭建
本节内容 1.Python的介绍 2.发展史 3.安装Python 4.搭建开发环境 5.Hello World程序 一.Python的介绍 Python的创始人为荷兰人吉多·范罗苏姆(Guido v ...
- 守护石谈学习Java之路
这次在CSDN Blink发表了几篇关于Java编程学习的小作文,讲述了Java工程师的成长路线.Java学习的技能树和入门工作要关注的核心问题,我继续做一次文章的整合与延展,以文章的形式发表出来, ...
- 开通博客-学习java之路
已被西南交通大学录取,毕设也已经进入末期.开始狂神说的Java学习之路,纪念一下!!!
- 学习opencv之路(一)
先看一下<学习opencv> 找几个demo 学会相机标定 我做的是单目相机的标定.
- 【学习进步之路】-【浏览器兼容】透明背景图IE、360浏览器不兼容
最近在项目中遇到了浏览器兼容问题,透明背景图在IE或360兼容模式下没有效果,以前都是网上搜到结果,直接用了,并没有深入的去理解和利用,总会在下一次使用的时候忘记.为了让自己在前端方面学习更有成效,想 ...
- 学习python之路_入门篇A
偶尔经同事的介绍进入了金角大王的博客里,看到大王编写的文章都是关于python编程的,由于自己一直也是做软件测试方面的工作,也一直想往自动化测试方面发展,了解到利用python可以进行自动化测试操作, ...
随机推荐
- 爬虫必备—BeautifulSoup
BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后便可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XML中查找指定元素变得简单. ...
- Java快速入门-05-数组循环条件 实例《延禧攻略》
<延禧攻略>如此火爆,蹭蹭热度,用 JAVA 最基础的数组,循环,条件,输入/输出,做了一个简单的小游戏,帮助初学者巩固 JAVA 基础,注释非常详细 动态图展示: xuanfei.jav ...
- Mybatis学习第三天——输入输出映射以及动态SQL
注意:以下传入数据与输出数据类型部分使用别名的方式,别名在SqlMapConfig.xml核心文件中配置 1.输入映射 1.1 传递简单数据类型 1.2 传递pojo中的类类型 1.3 传递Query ...
- 毕向东_Java基础视频教程第19天_IO流(01~05)
第19天-01-IO流(BufferedWriter) 字符流的缓冲区 缓冲区的出现提高了对数据的读写效率. 对应类缓冲区要结合流才可以使用. BufferedWriter BufferedReade ...
- IDEA创建maven项目时,maven太慢-archetypeCatalog=internal
创建项目时候加上archetypeCatalog=internal 参数, archetypeCatalog表示插件使用的archetype元数 据,不加这个参数时默认为remote,local,即中 ...
- Windows Azure系列公开课 - 第二课:为什么选择Windows Azure(下)
Windows Azure中有什么? |基础结构 Windows Azure能够根据您企业的需求提供最适合的基础结构,并且在业务发展或精简时能够根据变化的需求及时的做出改变.您可以将Windows A ...
- 修改UIView的backedlayer为CAShapeLayer
修改UIView的backedlayer为CAShapeLayer 什么叫backedlayer呢?backedlayer指的是一个View在创建好的时候就已经帮你创建好了一个与View大小一致的CA ...
- Python学习---Python的框架基础学习
框架基础 框架实质: 所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 B/S结构的响应: import socket def handle_requ ...
- database design three form
https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html
- 获取当前模块句柄(dll、exe)
HMODULE getCurrModuleHandle(){ MEMORY_BASIC_INFORMATION info; ::VirtualQuery((LPCVOID)(&getCurrM ...