【读书笔记】【Delphi高手突破】TControl与Windows消息的封装

原创 2015年01月05日 17:18:07

  今天开始开通博客,写一些读书笔记,用以以后自己便于查阅。

1,VCL类图主要分支

2,TObject与消息分发(万物之源“TObject”的消息机制原理)

a:自定义  TMyMsg:记录消息编码,内容结构体 .TMsgAccepter:消息接收器类

unit MsgDispTest;

interface
uses Dialogs, Messages;
type
  TMyMsg = record
    Msg : Cardinal;
    MsgText : ShortString;
  end;
  TMsgAccepter = class // 消息接收器类
    private
    procedure AcceptMsg2000(var msg : TMyMsg); message 2000;
    procedure AcceptMsg2002(var msg : TMyMsg); message 2002;
    public
    procedure DefaultHandler(var Message); override; //默认处理函数
  end;
  implementation
  { TMsgAccepter }
  procedure TMsgAccepter.AcceptMsg2000(var msg: TMyMsg);
  begin
    ShowMessage('嗨,我收到了编号为 2000 的消息,它的描述是:' + msg.MsgText);
  end;
  procedure TMsgAccepter.AcceptMsg2002(var msg: TMyMsg);
  begin
    ShowMessage('嗨,我收到了编号为2002的消息,它的描述是:' + msg.MsgText);
  end;
  procedure TMsgAccepter.DefaultHandler(var message);
  begin
    ShowMessage('嗨,这个消息我不认识,无法接收,它的描述是:' +TMyMsg(message).MsgText);
  end;
end.

b,调用单元

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,MsgDispTest;

type
  TForm1 = class(TForm)
    btnMsg2000: TButton;
    btnMsg2001: TButton;
    btnMsg2002: TButton;
    procedure btnMsg2000Click(Sender: TObject);
    procedure btnMsg2001Click(Sender: TObject);
    procedure btnMsg2002Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private

    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MsgAccept : TMsgAccepter; // 自定义的消息接收类
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  // 创建TMsgAccepter类的实例
  MsgAccept := TMsgAccepter.Create();
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// 析构TMsgAccepter类的实例
  MsgAccept.Free();
  MsgAccept := nil;
end;
procedure TForm1.btnMsg2000Click(Sender: TObject);
var
Msg : TMyMsg;
begin
  // 将值为2000的消息分发给MsgAccept对象,观察其反应
  Msg.Msg := 2000;
  Msg.MsgText := 'Message 2000'; // 消息的文字描述
  MsgAccept.Dispatch(Msg); // 分发消息
end;
procedure TForm1.btnMsg2002Click(Sender: TObject);
var
Msg : TMyMsg;
begin
  // 将值为2002的消息分发给MsgAccept对象,观察其反应
  Msg.Msg := 2002;
  Msg.MsgText := 'Message 2002'; // 消息的文字描述
  MsgAccept.Dispatch(Msg); // 分发消息
end;


procedure TForm1.btnMsg2001Click(Sender: TObject);
var
Msg : TMyMsg;
begin
  // 将值为2001的消息分发给MsgAccept对象,观察其反应
  Msg.Msg := 2001;
  Msg.MsgText := 'Message 2001'; // 消息的文字描述
  MsgAccept.Dispatch(Msg); // 分发消息 ·72·

end;
end.

c,通过测试

调用顺序:1,Dispatch(),存在

                  2,DefaultHandler(),不存在


3,TControl与Windows消息的封装

a,鼠标点击事件

TControl
  FOnMouseDown: TMouseEvent;
  property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;

 在MouseDown()中,才会通过FOnMouseDown事件指针真正去执行用户定义的OnMouseDown事件的代码。

b,Windows处理消息机制

c,Application对象的本质





《Delphi高手突破》学习笔记(一)

  《Delphi高手突破》据说挺不错,他用面向对象的观点描述了Delphi中的类和VCL架构。  第二章、面向对象编程理论基础设计优良的类的某些共同特征:具有状态信息,接口简单、明了,易用。在OP的...
  • wanshi131
  • wanshi131
  • 2005年11月08日 08:38
  • 1172

Delphi TControl 类(1)

本文介绍Delphi类和组件之TControl 研究,TControl 中声明的 Parent 属性类似于 TComponent 中声明的 Owner 属性,因为 Parent 控件释放控件的过程就像...
  • lailai186
  • lailai186
  • 2013年04月15日 08:06
  • 2073

【读书笔记】【Delphi高手突破】TCanvas

1,VCL将GDI的设备抽象成一个画布(Canvas) TCanvas = class(TPersistent) private FHandle: HDC; State: TCanvasState;...
  • putin1223
  • putin1223
  • 2015年01月06日 14:48
  • 328

delphi完美经典--第九、十章

第9章 Delphi用户接口设计详述 TObject->TPersistent->TComponent->TControl->大部分VCL组件(例外的如Ttimer父类为TComponent) D...
  • mwj_88
  • mwj_88
  • 2013年07月04日 11:15
  • 4273

DELPHI高手突破读书笔记--类/对象篇

---------------------------------------------------那什么样的开发工具才是优秀的、体贴的、以人为本的?我的标准是符合以下四点:(1)能够将要解决的问题...
  • zhmnsw
  • zhmnsw
  • 2006年04月13日 21:16
  • 844

《Delphi高手突破》

虽说这是本比较初级的书本,不过我还是看的津津有味。也许最近自己很少比较系统的去读写书了吧,总是看过几章节后就转移了注意力。   书中的很多知识虽说都是些应该知道,且程序员必须知道的问题,不过我看过还是...
  • laurecn
  • laurecn
  • 2004年10月14日 14:39
  • 839

014_《Delphi高手突破》

这本书以理论结合实践的方式,论述“如何在Delphi中使用面向对象编程方法,构建良好设计的程序”的主题。本书第l、2、3章以不同于一般书籍的方式,介绍面向对象编程的基础知识及其在Object Pasc...
  • shuaihj
  • shuaihj
  • 2010年11月22日 14:53
  • 2046

《跃迁》读书笔记之成为高手的技术

http://www.jianshu.com/p/af88f579be40?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm...
  • kangguang
  • kangguang
  • 2017年11月08日 09:41
  • 198

【读书笔记】【Delphi高手突破】TGraphicControl/TcustomControl 与画布(Canvas)

控件组织结构图                    TControl TGraphicControl      TWinControl                           ...
  • putin1223
  • putin1223
  • 2015年01月06日 15:26
  • 752

让你的Delphi非窗口自定义控件接收Windows消息

Windows messages are a key ingredient in communication between Windows and (your) applications and a...
  • MaxWoods
  • MaxWoods
  • 2014年05月19日 22:18
  • 3666
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【读书笔记】【Delphi高手突破】TControl与Windows消息的封装
举报原因:
原因补充:

(最多只允许输入30个字)