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. 1.2异常处理和服务配置、aop、日志、自定义事件处理

    一.异常处理 2.1.数据验证 现在假设说要进行表单信息提交,肯定需要有一个表单,而后这个表单要将数据提交到 VO 类中,所以现在的基本实现如下: 1. 建立一个 Member.java 的 VO 类 ...

  2. Delphi自定义窗口过程WinProc

    unit ScWndProc; interface uses Forms, Messages; const DDGM_FOOMSG = WM_USER; //自定义消息 implementation ...

  3. commonJS — 自定义事件处理(for CustomEvent)

    for CustomEvent github: https://github.com/laixiangran/commonJS/blob/master/src/forCustomEvent.js 代码 ...

  4. Delphi 自定义窗体(最大化、最小化、关闭、窗体的移动)

    Uses ShellAPI; 1.//最小化procedure TForm1.btn1Click(Sender: TObject);var  I, J, X, Y: Word;begin  //第一种 ...

  5. delphi 自定义内存管理

    1.主要通过GetMemoryManager来hook原来的内存管理. 2.通过SetMemoryManager来设置你自己的新的内存管理,可以用一个内存池来优化和管理程序的内存调用情况. proce ...

  6. Delphi 7学习开发控件(续)

    继上次我们学习开发一个简单的画线控件后,基本的制作控件步骤已经清楚了,这次我们继续加深学习控件的制作.我们打开Delphi 7创建一个应用程序,拖动LineTo控件到窗体上,仔细看左边的对象设计器,可 ...

  7. Delphi属性比对象的域有更强的功能

    8.4 Delphi自定义组件(3) http://tech.163.com 2006-04-29 11:49:34 来源: 清华大学出版社 网友评论0 条 论坛   3. 测试未安装的组件 在将新组 ...

  8. 第38课 Qt中的事件处理(上)

    1. GUI程序原理回顾 (1)图形界面应用程序的消息处理模型 (2)思考:操作系统发送的消息如何转变为Qt信号 2. Qt中的事件处理 (1)Qt平台将系统产生的消息转换为Qt事件 ①Qt事件是一个 ...

  9. delphi 导出xml文件

    procedure TfrmTallageDetail.ToolButton1Click(Sender: TObject); var Xml: TXMLDocument; Rootbusiness,R ...

随机推荐

  1. PHP支付宝手机网站支付功能

    1.开通支付宝商家中心里面的手机网站支付 2.再去开放平台-开发者中心-创建移动支付的应用-获取到APPID 3.接着去文档中心下载DEMO 其实demo很简单.如果第一次看的话会存在看不懂的状态. ...

  2. IDEA闪退问题

    这段时间经常遇到IDEA闪退的问题,在网上搜了一大堆的博客,无外乎是说让修改下面两个文件,但是改来改去没什么卵用,最后重装IDEA,一样的,没什么用.持续时间有几个月了,内心也有点崩溃,昨天下午彻底心 ...

  3. 深入理解React组件传值(组合和继承)

    在文章之前,先把这句话读三遍 Props 和组合为你提供了清晰而安全地定制组件外观和行为的灵活方式.注意:组件可以接受任意 props,包括基本数据类型,React 元素以及函数. 来源于React中 ...

  4. Eclipse Git分支实战

    切换分支 右键工程,创建新分支 命名新分支 点击finish,可以看到项目已经切换到hot_fix 修改代码: Ctrl+#提交到本地仓库,之后提交到远程仓库 Next,Finish 等待一下, 点击 ...

  5. 常用技术blog

    淘宝核心系统团队 http://csrd.aliapp.com/ 淘宝搜索技术博客 http://www.searchtb.com 淘宝量子恒道官方博客 http://blog.linezing.co ...

  6. Codeforces 940 区间DP单调队列优化

    A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...

  7. C\C++下获取系统进程或线程ID(转)

    在程序开发时有时需要获取线程和进程ID以分析程序运行 ()windows下获取进程或线程ID 通过调用系统提供的GetCurProcessId或GetNowThreadID来获取当前程序代码运行时的进 ...

  8. ie下,首页打开页面非常慢

    手里的项目,登录页面在IE下首次进入页面非常的慢,应该不只是登录页面,因为项目我也是半路接手的.开始以为是js的问题,后台把所有的代码都去掉,就一个空白的页面,然后慢慢的试试,最后才发现是一个CSS文 ...

  9. LeetCode--064--最小路径和

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入:[  [1,3,1], [1,5,1], ...

  10. Shell-04

    grep程序 Linux下文本处理三剑客-----grep sed awk sed:文本行编辑器(流编辑器)        awk:报告生成器(文本输出格式化)         grep:文本行过滤工 ...