理解 Delphi 的类(四) - 初识类的事件

先勾画一下思路:
1、建立一个类, 里面有年龄字段 FAge;
2、通过 Age 属性读写 FAge;
3、如果输入的年龄刚好是 100 岁, 将会激发一个事件, 这个事件我们给它命名为: OnHundred

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Button3: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);end;{先定义一个特殊的类型: 一个对象所属的过程类型; 这是建立一个事件的前提}TMyEvent = procedure of object;{TMyClass 类}TMyClass = classstrict privateFAge: Integer;           {年龄字段}FOnHundred: TMyEvent;    {为我们刚刚定义的 TMyEvent 类型指定一个变量: FOnHundred}procedure SetAge(const Value: Integer);publicprocedure SetOnHundred1; {建立事件将要调用的过程}procedure SetOnHundred2; {建立事件将要调用的过程}constructor Create;property Age: Integer read FAge write SetAge;property OnHundred: TMyEvent read FOnHundred write FOnHundred; {其实事件也是属性}{事件命名一般用 On 开始}end;varForm1: TForm1;implementation{$R *.dfm}{ TMyClass }constructor TMyClass.Create;
beginFOnHundred := SetOnHundred1; {在对象建立时, 我们先让事件调用 SetOnHundred1 方法}
end;procedure TMyClass.SetAge(const Value: Integer);
beginif (Value>0) and (Value<200) thenFage := Value;if Value=100 thenOnHundred;      {当输入的年龄是 100 岁时, 激活事件}
end;procedure TMyClass.SetOnHundred1;
beginShowMessage('祝贺您 100 岁大寿!');
end;procedure TMyClass.SetOnHundred2;
beginShowMessage('但愿我们都能活到 100 岁!');
end;//测试1:
procedure TForm1.Button1Click(Sender: TObject);
varmyClass: TMyClass;
beginmyClass := TMyClass.Create;myClass.Age := 99;                  {如果年龄不是负数而又小于 200}ShowMessage(IntToStr(myClass.Age)); {99; 对象就接受了}myClass.Free;
end;//测试2:
procedure TForm1.Button2Click(Sender: TObject);
varmyClass: TMyClass;
beginmyClass := TMyClass.Create;myClass.Age := 100; {这时将会激活事件, 弹出对话框: 祝贺您 100 岁大寿!}myClass.Free;
end;//测试3:
procedure TForm1.Button3Click(Sender: TObject);
varmyClass: TMyClass;
beginmyClass := TMyClass.Create;myClass.OnHundred := myClass.SetOnHundred2; {让事件指向另一个方法}myClass.Age := 100; {这时将会激活事件, 弹出对话框: 但愿我们都能活到 100 岁!}myClass.Free;
end;{本节我自定义了一个事件类型: TMyEvent, 它没有参数,一般系统定义的事件类型都是有参数的;事件类型就是一个指针, 它指向一个过程,事件类型定义时就指定了参数的类型和个数,事件调用的过程的参数必须和定义时一致,譬如 TMyEvent 没有参数, 它调用的 SetOnHundred1、SetOnHundred2 也都没有参数.
}
end.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/51966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

resource doesn‘t have a corresponding Go package.

resource doesnt have a corresponding Go package. GO这个鬼东西不能直接放src下。 ************ Building Go project: ProjectGoTest ************with GOPATH: D:\Go;D:\eclipse-jee-oxygen-2-win32-x86_64\workspace\ProjectGoTest >> Running: D:\Go\bin\go.exe …

Java | 使用ServerSocket查找TCP可用端口

关注&#xff1a;CodingTechWork 引言 在项目开发中&#xff0c;有一个程序是专门给服务下发tcp端口占用的&#xff0c;但是tcp端口有时候会被其他服务给占用&#xff0c;此时端口就会冲突。本文提供一个工具类进行端口占用判断并返回可用端口。 代码 工具类 Slf4j public …

Open Source Program Office

OSPO 表示 "Open Source Program Office"&#xff0c;是指开源项目办公室或开源计划办公室。它是指在组织内部负责管理和支持开源项目的团队或部门。OSPO 的目标是协调、推动和管理组织内部的开源项目&#xff0c;以促进开源文化、社区参与和开源项目的成功。 OSPO …

爱校对发布全新PDF校对工具,为用户带来更为便捷的校正体验

随着数字化文档使用的普及&#xff0c;PDF格式已经成为最为广泛使用的文件格式之一。为满足广大用户对于高效、准确PDF文档校对的需求&#xff0c;爱校对团队经过深入研发&#xff0c;正式推出全新的PDF校对工具&#xff01; 这一全新工具针对PDF文件格式进行了深度优化&#…

k8s 常用命令(四)

12、删除pod中的nginx服务及service [rootmaster ~]# kubectl delete deployment nginx -n kube-public [rootmaster ~]# kubectl delete svc -n kube-public nginx-service 13、查看endpoint的信息 [rootmaster ~]# kubectl get endpoints 14、修改/更新&#xff08;镜像、…

机器学习十大算法之七——随机森林

0 引言 集成学习&#xff08;ensemble learning&#xff09;是时下非常流行的机器学习算法&#xff0c;它本身不是一个单独的机器学习算法&#xff0c;而是通过在数据上构建多个横型&#xff0c;集成所有模型的建模结果&#xff0c;基本上所有的机器学习领域都可以看到集成学习…

11.redis持久化

1.redis持久化 Redis的所有数据都是保存在内存中&#xff0c;因此redis重启后数据就丢失了&#xff0c;所以需要不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”)&#xff1b;或者把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。 …

Python遥感图像处理应用篇037 GDAL+Scikit-image遥感图像主成分分析PCA

1.计算效果图 使用多波段遥感图像进行主成分分析,这里使用了6个波段的数据计算和显示效果图如下:左边是原图像IR+R+G显示图,右边是计算得到的3个主成分组合显示的RGB图像。 2.计算方法详解 使用GDAL库读取和保存遥感图像,使用numpy对图像数据进行相应的变换和计算,使用…

Fpass与Fstop

在MATLAB中&#xff0c;“Fpass”、“Fstop”、"Apass"和"Astop"是数字滤波器设计中常用的参数。它们用于定义滤波器的频率响应和滤波器的性能。 "Fpass"表示通带频率&#xff0c;指的是滤波器允许通过的频率范围。在数字滤波器设计中&#xff0…

前端面试:【性能优化】页面加载性能、渲染性能、资源优化

嗨&#xff0c;亲爱的前端开发者&#xff01;在今天的Web世界中&#xff0c;用户期望页面加载速度快、交互流畅。因此&#xff0c;前端性能优化成为了至关重要的任务。本文将探讨三个关键方面的性能优化&#xff1a;页面加载性能、渲染性能以及资源优化&#xff0c;以帮助你构建…

网络安全应急响应预案演练

制定好的应急响应预案&#xff0c;只做培训还不够&#xff0c;还需要通过实战演 练来提高应对网络突发事件的行动力&#xff0c;针对网络突发事件的假想情 景&#xff0c;按照应急响应预案中规定的职责和程序来执行应急响应任务。 根据出现的新的网络攻击手段或其他特殊情况…

IDEA创建Mybatis格式XML文件

设置位置&#xff1a;File | Settings | Editor | File and Code Templates 选择Files&#xff0c;点击号 Name中输入xml模板名&#xff08;名称自行决定&#xff09;&#xff0c;后缀名extension输入xml&#xff08;固定&#xff09; 内容处输入Mybatis的xml文件模板内容&…

javaWeb差缺补漏(二)【针对于自身知识点掌握情况】

javaweb 建立数据库连接 1、编写数据库建立连接工具类 public class JDBCUtils{private static DruidDataSource dataSource;static{try{Properties propertis new Properties();InputStream inputStream JDBCUtils.class.getClassLoader().getResourceAsStream(jdbc.prope…

【光学镀膜】-- USPM反射率、LAB

系列文章目录 文章目录 系列文章目录前言一、OLYMPUS(奥林巴斯)1.实现高速测定2.最适用于测定细小部件、镜片的反射率3.测定反射率时&#xff0c;不需要背面防反射处理4.可选择的膜厚测定方法 二、USPM-RU III1.介绍2.特点3.参数4.光源5.特长6.测定原理7.规格 三、USPM-W1.特征…

csdn冷知识:如何在csdn里输入公式或矩阵

目录 1 输入公式 2 输入矩阵 3 如何输入复杂公式 4 如何修改&#xff0c;已经生成的公式 1 输入公式 进入编辑模式点击右边的菜单&#xff1a;公式然后进入公式编辑器&#xff0c;选择右边的 ... 可以选择大括号等&#xff0c;右边还有矩阵符号选择后你需要创建几行几列的…

PL端案例开发手册

目 录 前 言 1 工程编译、程序加载方法 1.1 工程编译 1.2 程序加载 2 led-flash 2.1 案例说明 2.2 操作说明 2.3 关键代码 更多帮助 前 言 本文主要介绍PL端案例的使用说明&#xff0c;适用开发环境&#xff1a;Windows 7/10 64bit、Xilinx Unified 20…

正则表达式:学习使用正则表达式提取网页中的目标数据

使用正则表达式提取网页中的目标数据主要有以下几个步骤&#xff1a; 获取网页内容&#xff1a;首先&#xff0c;你需要使用Python的库&#xff08;如requests&#xff09;获取网页的HTML内容。 构建正则表达式&#xff1a;根据你想要提取的目标数据的特征&#xff0c;构建相应…

Tomcat的安装与介绍

首先我们先了解一下什么是服务器&#xff1f;什么是服务器软件&#xff1f; 什么是服务器&#xff1f;安装了服务器软件的计算机。 什么是服务器软件&#xff1f; 服务器软件是一种运行在服务器操作系统上&#xff0c;用于接收和处理客户端请求&#xff0c;并提供相应服务和资…

PySide6学习笔记--gui小模版使用

一、界面绘制 1.desiner画图 2.画图代码 # -*- coding: utf-8 -*-################################################################################ ## Form generated from reading UI file t1gui.ui ## ## Created by: Qt User Interface Compiler version 6.5.2 ## ##…

第9天----【位运算进阶之----按位取反(~)】(附补码,原码讲解)

今天我们来谈谈按位取反这件事。 简单来说&#xff0c;按位取反就是先将一个数写成其二进制表达形式&#xff0c;然后1变0&#xff0c;0变1。下面就让我们展开深入地讨论吧&#xff01; 文章目录 一、预备知识&#xff1a;1. 原码&#xff1a;定义&#xff1a;优缺点&#xff…