Delphi 自定义消息处理过程与Windows消息处理过程

 Delphi中,自定义消息处理过程与Windows消息处理过程的定义是一样的。
1.主用步骤:

1>. 首先定义一个消息标识符常量;如:WM_MYMessage = WM_USER+ 5;(标识符常量的取值范围为WM_USER~WM_APP-1)

2>. 在单元文件中定义消息响应过程和消息标识符常量。

3>. 消息响应过程使用消息类TMessage的变量为参数。

4>. 应定义一个消息标识符变量,变量名必须为Message;因为Message为保留字。

      如: Procedure WMUserHandler(var msg:TMessage);Message WM_MYMessage;
               if msg.Message = WM_MYMessage then begin  处理代码;  end;

5>. 使用PostMessage或SendMessage函数等来发送自定义消息。

 

2. 发送消息

1>.SendMessage函数:

     该函数用来向目标窗体发送消息。利用该函数发送消息到指定的窗口队列,但不会立即返回,

而是等到发送的消息被处理之后才返回。

例如:通过某组件的句柄获取该组件的文本信息;

var

  texts:array[0..255] of char;

begin

  SendMessage(handle,wm_gettext,@texts,255);

end;

 

2>.PostMessage函数:

      该函数用来向目标窗体发送消息。利用该函数发送消息到指定的窗口队列,然后立即返回,其

返回值是一个布尔值,表示消息是否发送到指定的消息队列中。

例如:通过向TEdit组件发送消息实现在TEdit组件上按一下回车键效果。

      PostMessage(edt1.handle,wm_keydown,VK_return,1);

 

3>.PostThreadMessage函数:

      该函数用于向线程中发送消息,并到指定的线程中,然后立即返回。该函数返回是的一个布尔

值,表示消息是否发送到指定的线程消息队列中。

 

4>.Perform方法:

      该方法声明在TControl类中,适用于使用TControl派生的对象,并可以想任何一个窗体或组件

发送消息。

 

5>.Broadcast方法:

      该方法声明在TWinControl类中,用于向当前组件的所有子组件广播一条消息。

      Procedure Broadcast(var Message);


3.接受消息

消息的接受就是消息的截取。

1>.消息钩子(Message Hook):

   对于钩子来说可以针对所有窗体句柄来截取消息。所以适用性广泛,针对的不仅仅是一个窗

体,而是进程所在的所有窗体的消息。

 

2>.子类化(SubClass):

   简单来说,就是替换窗口过程。该过程使用SetWindowLong(AHandle,GWL_WNDPROC,

Integer(@NewWndProc));SetWindowLong该函数改变指定窗口的属性.函数也将指定的一个32位

值设置在窗口的额外存储空间的指定偏移位置。

 

3>.重载(Override)窗口处理函数WndProc/DefaultHandler:

  protected

     Procedure WndProc(var AMsg:TMessage);override;

 

4>.消息句柄(Message Handler)

   如上面1所示。

 

4.各种消息处理方法的触发顺序

1>. Application.ProcessMessages:

    防止进程阻塞,使程序能够响应消息队列中的其他事件。

 

2>.首先会调用MainWndProc方法来处理该消息。

   Application.OnMessage; MyMessageProc(var Msg:TMsg; var Handle:Boolean)

 

3>.然后把消息传递给WndProc方法处理;

 

4>.消息在WndProc方法中准备派发,最后由Dispatch方法将消息派发给某个消息句柄。

   就是上面1所示定义的方法。

 

5>.处理完之后,DefaultHandler方法对消息进行最后的处理。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Delphi是一种集成开发环境(IDE),被用于创建Windows平台上的应用程序。在Delphi中,我们可以使用自定义类来创建自己的数据类型和对象。 自定义类是用于封装数据和功能的模块化单元。通过自定义类,我们可以将相关的数据和方法组织在一起,以便更好地管理和操作。一个自定义类可以包含属性(对应数据)、方法(对应功能)和事件(对应触发器)。 在Delphi中,我们可以使用类向导来创建自定义类。类向导提供了一个可视化界面,可以设置类的属性和方法。首先,我们可以定义类的名称、父类(如果有)、接口(可选)等。然后,我们可以添加属性或方法,并为它们设置数据类型、访问修饰符和实现代码。最后,我们可以根据需要为类添加事件。 通过自定义类,我们可以创建多个对象,每个对象都具有相同的属性和方法,但它们的数据可以独立进行操作。我们可以在代码中通过实例化类来创建对象,并访问对象的属性和方法。 自定义类在Delphi中具有许多优点。首先,它提高了代码的可维护性和可读性,因为相关的数据和功能被组织在一起。其次,它提供了代码的重用性,因为我们可以在不同的应用程序中使用相同的类。另外,自定义类还支持面向对象编程的特性,如继承、封装和多态,使得我们可以更加灵活地设计和实现程序。 总之,Delphi自定义类是一种强大的工具,可以帮助我们创建模块化、可维护和灵活的应用程序。通过类向导,我们可以轻松地创建自定义类,并利用它们来封装数据和功能,提高代码的可读性和重用性。 ### 回答2: Delphi是一种面向对象的编程语言,可以使用它来创建自定义类。自定义类是指根据程序需求,开发者可以创建自己定义的数据类型。 在Delphi中,我们可以使用class关键字来定义一个类。一个类由一组属性和方法组成。属性是类的数据成员,用于存储和表示对象的状态。方法是用于对对象进行操作和执行特定功能的函数。 在定义类时,需要考虑类的属性和方法。可以根据需要添加需要的属性,每个属性都有其类型和访问权限。属性的类型可以是基本数据类型,如整数、浮点数、字符等,也可以是其他自定义类。 类的方法定义了类的行为和功能,可以包括对属性的读取和设置、对象的初始化和析构等操作。方法可以是公共方法,可以在类的外部访问和调用;也可以是私有方法,只能在类的内部访问和调用。 自定义类的一个好处是可以根据需要封装和组织数据和功能,提高代码的可读性和可维护性。通过自定义类,可以建立具有相关属性和方法的对象实例,简化程序的设计和开发过程。 在Delphi中,可以使用自定义类来实现各种功能,如创建游戏角色、管理学生信息、处理文件操作等。通过定义各种属性和方法,可以使类适应不同的应用场景,并实现灵活的功能。 总的来说,Delphi自定义类功能十分强大,可以根据需求创建各种数据类型并封装相关的操作,提高程序的可扩展性和可维护性。通过自定义类,可以实现更加灵活和高效的编程。 ### 回答3: Delphi 是一种高级的编程语言,它允许开发人员创建自定义类来实现特定功能和逻辑。自定义类是面向对象编程的基本概念之一,它允许开发人员将相关的数据和方法组织在一起,以便更好地管理和重用代码。 在 Delphi 中创建自定义类的过程非常简单,只需要按照一定的语法规则来定义类的成员即可。自定义类可以包含属性、方法和事件等成员。 属性是类的特征或状态,可以通过访问器(Getter)和修改器(Setter)来读取和修改属性的值。方法是类的行为,用于执行特定的操作或完成特定的任务。事件是类的响应机制,可以在特定的情况下触发特定的操作。 使用自定义类可以让开发人员更好地组织和管理代码,并且提高代码的重用性。当我们需要实现某项特定功能时,只需要创建一个适应需求的自定义类,并调用类的成员来实现相关的功能。 例如,我们可以创建一个自定义类来表示一个学生,该类可以包含学生的姓名、年龄和成绩等属性,还可以包含计算学生平均成绩的方法。当我们需要计算一个学生的平均成绩时,只需要创建一个学生对象,并调用平均成绩的计算方法即可。 总之,Delphi 提供了强大的功能来创建自定义类,使开发人员能够更好地组织和管理代码,并提高代码的可读性和可维护性。通过合理地使用自定义类,我们可以更加高效地开发出符合需求的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值