(delphi11最新学习资料) Object Pascal 学习笔记---第10章第3节(事件是属性)

devtools/2024/9/23 14:25:05/
10.3.3 事件是属性

​ 在 Object Pascal 中一个非常重要的概念是,事件几乎都是作为方法指针类型的属性来实现的。这意味着,要处理一个组件的事件,需要为相应的事件属性指定一个方法。就代码而言,这意味着你可以为一个事件处理器分配一个对象的方法,使用的代码下面这样,我们以及在上一节见过了:

Button1.OnClick := ButtonClickHandler;

​ 再一次强调,事件的方法指针类型必须与所赋值方法的签名相匹配,否则编译器会出错。

​ 系统为事件定义了几种常用的标准方法指针类型,首先是简单类型:

typeTNotifyEvent = procedure(Sender: TObject) of object;

​ 这通常是 OnClick 事件处理器的类型,因此这意味着上述方法必须(在类中)声明为:

procedure ButtonClickHandler(Sender: TObject);

如果这听起来有点令人困惑,请思考一下在IDE中所发生的:选择一个按钮,比方说 Button1,双击它,在开发环境的 "对象检查器 "中列出的OnClick 事件中,一个新的空方法会被添加到容器模块(可能是窗体)中:

procedure TForm1.Button1Click(Sender: TObject) 
beginend;

​ 你填写方法的代码,然后,一切正常!这是因为将事件处理器方法赋值给事件是在幕后进行的,与您在设计时为其他组件设置属性的方式完全相同。

​ 从上面的描述中,你可以了解到事件与其分配的方法之间并不存在一一对应的关系。恰恰相反。可以有多个事件共享同一个事件处理器,这也是经常使用的发送者参数的原因,该参数表示哪个对象触发了事件。例如,如果为两个按钮设置了相同的 OnClick 事件处理器,那么 Sender 值将包含对被点击的按钮对象的引用。

注意 您可以在代码中为不同的事件分配相同的方法,如上所示,也可以在设计时这样做。在 "对象检查器 "中选择事件时,按下事件名称右侧的箭头按钮,可以看到 "兼容 "方法的下拉列表–具有相同方法指针类型的方法列表。这样就可以轻松地为不同组件的同一事件选择相同的方法。在某些情况下,您还可以为同一组件的不同兼容事件分配相同的处理器。


http://www.ppmy.cn/devtools/22575.html

相关文章

Oracle索引详解

1.索引 1.1 索引 索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据;Oracle存储索引的数据结构是 B 树,位图索引也是如此,只不过是叶子节点不同B数索引;索引由根节点、分支节点和叶子节点组成&…

MATLAB语音信号分析与合成——MATLAB语音信号分析学习资料汇总(图书、代码和视频)

教科书:MATLAB语音信号分析与合成(第2版) 链接(含配套源代码):https://pan.baidu.com/s/1pXMPD_9TRpJmubPGaRKANw?pwd32rf 提取码:32rf 基础入门视频: 视频链接: 清…

【机器学习与流体力学交叉领域的期刊】

当涉及到机器学习与流体力学交叉领域的期刊时,以下是一些建议的期刊,这些期刊涵盖了机器学习和流体力学领域的最新研究和发展: Journal of Fluid Mechanics:这是流体力学领域的顶级期刊,虽然主要关注流体力学的理论、…

rabbitmq报错

文章目录 Applying plugin configuration to rabbitDESKTOP-C3HQ9BK... Plugin configuration unchanged.rabbitmq-service.bat start和rabbitmq-plugins enable rabbitmq_management这两个命令在RabbitMQ中具有不同的功能和用途。以下是两者之间的主要区别: Applyi…

【JavaEE网络】网络编程及其应用概述

目录 面向字节流粘包问题 TCP异常情况TCP/UDP对比 网络层重点协议IP协议IP地址 面向字节流 粘包问题 在面向字节流的情况下,会产生一些其他的问题:粘包问题,这里“粘”的是“应用层数据报”,通过TCP read/write的数据&#xff0…

Go语言在Web开发中有哪些常用框架?

文章目录 1. Gin原因和解决方案示例代码 2. Echo原因和解决方案示例代码 3. Revel原因和解决方案示例代码 4. Buffalo原因和解决方案示例代码 总结 Go语言在Web开发中拥有许多优秀的框架,这些框架帮助开发者快速构建稳定且高效的Web应用。下面是一些常用的Go语言Web…

LMDeploy 量化部署 LLM-VLM 实践 学习笔记

视频链接 https://www.bilibili.com/video/BV1tr421x75B/?vd_sourcea1ce254b4a97f9f687a83e661793cb2c 什么是模型部署 部署指的是已经开发好的大模型投入使用,要把模型部署到服务器或者移动端里,如何在有限的资源里加载大模型? 比如你好不…

Linux之进程间通信(二)

system V system V共享内存是内核中专门设计的通信的方式, 粗粒度划分操作系统分为进程管理, 内存管理, 文件系统, 驱动管理.., 粒度更细地分还有 进程间通信模块. 对于操作系统, 通信的场景有很多, 有以传送数据, 快速传送数据, 传送特定数据块, 进程间协同与控制以目的, 它…