知识大全 Delphi自定义部件开发(三)[1]

Posted 消息

篇首语:没有理想,那些所谓的奋斗都是空话。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Delphi自定义部件开发(三)[1]相关的知识,希望对你有一定的参考价值。

DELPHI基础教程:Delphi自定义部件开发(三)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   创建新的消息处理方法

  因为Delphi只为大多数普通Windows消息提供了处理方法 所以当你定义自己的消息时 就要创建新的消息处理方法

  用户自定义消息的过程包括两个方面

  ● 定义自己的消息

  ● 声明新的消息处理方法

  ⑴ 定义自己的消息

  许多标准部件为了内部使用定义了消息 定义消息的最一般的动因是广播信息和状态改变的通知

  定义消息过程分两步

  ● 声明消息标识符

  ● 声明消息记录类型

  ① 声明消息标识

  消息标识是整型大小的常量 Windows保存了小于 的消息用于自己使用 因此当声明自己的消息时 你应当大于

  常量WM_USER代表用于自定义消息的开始数字 当定义消息标准时 你应当基于WM_USER

  某些标准Windows控制使用用户自定义范围的消息 包括ListBox ComboBox EditBox和Button 如果从上述部件中继承了一个部件 在定义新的消息时 应当检查一下Message单元是否有消息用于该控制

  定义消息的方法如下

  Const

  WM_MYFIRSTMESSAGE=WM_USER+ ;

  WM_MYSECONDMESSAGE=WM_USER+ ;

  ② 声明消息记录类型

  如果你想给予自定义消息的参数有含义的名字 就要为该消息声明消息记录类型 消息记录是传给消息处理方法的参数的类型 如果不使用消息参数或者想使用旧风格参数 可以使用缺省的消息记录

  声明消息记录类型要遵循下列规则

  ● 以消息名命名消息记录类型 以T打头

  ● 将记录中第一个域命名为Msg 类型为TMsgPraram

  ● 将接着的两个字节定义为word 以响应word大小的参数

  ● 将接着的四个字节与long参数匹配

  ● 将最后的域命名为Result 类型为Longint

  下面是MMouse的定义

  type

  MMouse=record

  Msg: TMsgParam; 第一个是消息ID

  Keys: Word; wParam

  case Integer of 定义lParam的两种方式

  o: (

  Xpos: Integer; 或者以x y座标

  Ypos: Integer)

   : (

  Pos : TPoint; 或者作为单个点

  Result: Longint; ) 最后是Result域

  end;

  MMouse使用变长记录定义了相同参数的不同名字集

  ⑵ 声明新的消息处理方法

  有两类环境需要你定义新的消息处理方法

  ● 自定义新部件需要处理没有被标准部件处理的Windows消息

  ● 已定义了自定义部件使用的新消息

  声明消息处理方法的办法如下

  ● 在部件声明中的protected部分声明方法

  ● 将方法做成过程

  ● 以要处理的消息名命名方法 但不带下划线

  ● 传递一个命名为Message的var参数 类型为消息记录类型

  ● 编写用于该部件的特别处理代码

  ● 调用继承的消息方法

  下面是用于用户自定义消息CM_CHANGECOLOR的消息处理代码

  type

  TMyComponent=class(TControl)

  …

  protected

  procedure CMChangeColor(var Message:TMessage)

  message CM_CHANGECOLOR;

  end:

  procedure TMyComponent CMChangeColor(var Message: TMessage)

  begin

  color := Message lParam;

  inherited;

  end;

   注册部件

  编写部件及其属性 方法和事件只是部件创建过程的一部分 尽管部件具有这些特征就可用 但部件真正功能强大的是在设计时操作它们的能力

  使部件在设计时可用需要经过如下几步

  ● 用Delphi注册部件

  ● 增加选择板位图

  ● 提供有关属性和事件的帮助

  ● 存贮和读取属性

   用Delphi注册部件

  为了让Delphi识别自定义部件 并将它们放置于Component Palette上 你必须注册每一个部件

  注册一个部件要在部件所在单元里加入Register方法 这包括两个方面的内容

  ● 声明注册过程

  ● 实现注册过程

  一旦安装了注册过程 就可以将部件安装在选择板上

  注册过程要在部件所在单元中写一个过程 该过程必须以Register命名 Register必须出现在库单元的interface部分 这样Delphi就能定位它 在Register过程中 可以为每个部件调用过程RegisterComponents

  下面的代码演示了建立和注册部件的概略方法

  unit MyBtns;

  interface

  type

  … 声明自定义部件

  procedure Register;

  Implementation

  procedure Register;

  begin

  … 注册部件

  end;

  end

  在Register过程中 必须注册每一个要加入Component Palette的部件 如果库单元包含若干部件 就要将它们一次性注册

cha138/Article/program/Delphi/201311/25113

相关参考

知识大全 Delphi自定义部件开发(三)[3]

DELPHI基础教程:Delphi自定义部件开发(三)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(三)[2]

DELPHI基础教程:Delphi自定义部件开发(三)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(一)[1]

DELPHI基础教程:Delphi自定义部件开发(一)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(二)[1]

DELPHI基础教程:Delphi自定义部件开发(二)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(四)[1]

DELPHI基础教程:Delphi自定义部件开发(四)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(一)[3]

DELPHI基础教程:Delphi自定义部件开发(一)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(一)[2]

DELPHI基础教程:Delphi自定义部件开发(一)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(二)[4]

DELPHI基础教程:Delphi自定义部件开发(二)[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(二)[3]

DELPHI基础教程:Delphi自定义部件开发(二)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(二)[2]

DELPHI基础教程:Delphi自定义部件开发(二)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看