delphi自定义事件处理
http://www.cnblogs.com/ywangzi/archive/2012/09/06/2673414.html
delphi自定义事件处理
为什么我们点击按钮,就会执行按钮的onclick事件?这个事件是怎么和我们自己的代码关联起来的。相信很多人都有这个疑问。那么我们就通过一个自定义事件来了解这里面得运行原理。以乘法运算来显示,如果乘数大于100,就提示用户,太大了。这个事件用自定义事件定义。 大家先看一下最终效果,
我添加了三个文本框,一个按钮,当第一或者第二个文本框的数>100时,点求积按钮,提示Too Big 对话框。
完成自定义事件需要5步来做:
1.定义TNotifyEvent类型私有变量
FTooBig:TNotifyEvent;
FTooBig是一个指针,它可以保持事件方法的调用地址。
2.公布一个属性
published
property OnTooBig:TNotifyevent read FTooBig write FTooBig;
OnTooBig这个属性用来操作FTooBig这个私有变量,因为FTooBig是个函数指针,所以但读这个变量时,也就调用了函数。
3.定义事件处理函数
procedure TooBigEvent(Sender: TObject); procedure TForm1.TooBigEvent(Sender: TObject);
begin
Application.MessageBox('Too Big','Test Event!',MB_OK);
end;
这是当文本框数太大时执行的方法。
4. 把事件处理函数赋值给TNotifyEvent私有变量
FTooBig := TooBigEvent;
5. 当条件符合时执行事件处理函数
procedure TForm1.Button1Click(Sender: TObject);
var
val1 : integer;
val2 : integer;
res : integer;
begin
val1 := StrToInt(Edit1.Text);
val2 := StrToInt(Edit2.Text);
if(val1<100)and(val2<100) then
begin
res := val1*val2;
Edit3.Text := IntToStr(res);
end
else
if assigned(FTooBig) then OnTooBig(Self);
end;
下面贴出全部代码:
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
procedure TooBigEvent(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private FTooBig:TNotifyEvent;
{ Private declarations }
public
{ Public declarations }
published
property OnTooBig:TNotifyevent read FTooBig write FTooBig;
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
var
val1 : integer;
val2 : integer;
res : integer;
begin
val1 := StrToInt(Edit1.Text);
val2 := StrToInt(Edit2.Text);
if(val1<100)and(val2<100) then
begin
res := val1*val2;
Edit3.Text := IntToStr(res);
end
else
if assigned(FTooBig) then OnTooBig(Self);
end;
procedure TForm1.TooBigEvent(Sender: TObject);
begin
Application.MessageBox('Too Big','Test Event!',MB_OK);
end; procedure TForm1.FormCreate(Sender: TObject);
begin
FTooBig := TooBigEvent;
end; end.
delphi自定义事件处理的更多相关文章
- 1.2异常处理和服务配置、aop、日志、自定义事件处理
一.异常处理 2.1.数据验证 现在假设说要进行表单信息提交,肯定需要有一个表单,而后这个表单要将数据提交到 VO 类中,所以现在的基本实现如下: 1. 建立一个 Member.java 的 VO 类 ...
- Delphi自定义窗口过程WinProc
unit ScWndProc; interface uses Forms, Messages; const DDGM_FOOMSG = WM_USER; //自定义消息 implementation ...
- commonJS — 自定义事件处理(for CustomEvent)
for CustomEvent github: https://github.com/laixiangran/commonJS/blob/master/src/forCustomEvent.js 代码 ...
- Delphi 自定义窗体(最大化、最小化、关闭、窗体的移动)
Uses ShellAPI; 1.//最小化procedure TForm1.btn1Click(Sender: TObject);var I, J, X, Y: Word;begin //第一种 ...
- delphi 自定义内存管理
1.主要通过GetMemoryManager来hook原来的内存管理. 2.通过SetMemoryManager来设置你自己的新的内存管理,可以用一个内存池来优化和管理程序的内存调用情况. proce ...
- Delphi 7学习开发控件(续)
继上次我们学习开发一个简单的画线控件后,基本的制作控件步骤已经清楚了,这次我们继续加深学习控件的制作.我们打开Delphi 7创建一个应用程序,拖动LineTo控件到窗体上,仔细看左边的对象设计器,可 ...
- Delphi属性比对象的域有更强的功能
8.4 Delphi自定义组件(3) http://tech.163.com 2006-04-29 11:49:34 来源: 清华大学出版社 网友评论0 条 论坛 3. 测试未安装的组件 在将新组 ...
- 第38课 Qt中的事件处理(上)
1. GUI程序原理回顾 (1)图形界面应用程序的消息处理模型 (2)思考:操作系统发送的消息如何转变为Qt信号 2. Qt中的事件处理 (1)Qt平台将系统产生的消息转换为Qt事件 ①Qt事件是一个 ...
- delphi 导出xml文件
procedure TfrmTallageDetail.ToolButton1Click(Sender: TObject); var Xml: TXMLDocument; Rootbusiness,R ...
随机推荐
- wordpress数据库结构以及数据表之间的关系
默认WordPress一共有以下11个表.这里加上了默认的表前缀 wp_ . wp_commentmeta:存储评论的元数据 wp_comments:存储评论 wp_links:存储友情链接(Blog ...
- svn版本服务器的搭建和简单使用
⼀ 服务器搭建篇 1 在”应⽤用程序”⽂文件夹下,找到”实⽤用⼯工具”,打开”终端”APP 2 运⾏行svnadmin create repository,运⾏行完毕之后,可以在当前⺫⽬目录下找 到⼀ ...
- django基础篇06-ModelForm操作及验证
本文内容主要来自银角大王的博客 学习大纲: 一.ModelForm 二.Ajax - 原生(jQuery) - 伪Ajax操作 三.文件上传(预览) - Form提交 - Ajax文件上传 四. 图片 ...
- mongodb 在 linux 中的安装和简单使用
一.环境介绍 1.mongodb版本: mongodb-linux-x86_64-rhel70-3.2.22 # 点击下载2.linux版本: Ubuntu 18.04.2 LTS 二.安装1.上传 ...
- python数字图像处理(二)关键镜头检测
镜头边界检测技术简述 介绍 作为视频最基本的单元帧(Frame),它的本质其实就是图片,一系列帧通过某种顺序组成在一起就构成了视频.镜头边界是视频相邻两帧出现了某种意义的变化,即镜头边界反映了视频内容 ...
- web框架-(四)Django进阶之数据库对象关系映射
Django ORM基本配置 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去 ...
- Vue中的组件及缓存 keep-alive
<script> import { mapState } from "vuex"; export default { data() { return { ...
- java String源码浅出
1.public char charAt(int index) 返回指定索引处的 char 值. 源码: =====================String.class============== ...
- 2.docker基础用法
一.前言 OCI(Open Container Initiative):由Linux基金会主导于2015年6月创立,OCI定义了容器运行时的标准. OCI有两部分组成: the Runtime Spe ...
- js中或者vue中 Object.assign()用法详解
Object.assign()是浅拷贝. 合并对象 var o1 = { a: 1 }; var o2 = { b: 2 }; var o3 = { c: 3 }; var obj = Object. ...