面向对象的编程工具的特点之一就是要提高代码重用性(Reuse),作为新一代可视化开发工具,Delphi中的代码重用性相当高。我们知道,在 Delphi中,大部分程序代码都直接或间接地对应着一个事件,此程序称为事件处理句柄,它实际上就是一个过程。从应用程序的工程到表单、构件和程 序,Delphi强调的是其开发过程中每一层次的重用性,可以通过编写某些构件常用的事件处理句柄来达到程序重用目的。你可以在属性窗口的Events页 上将A事件的处理句柄指向B事件的处理句柄,这样A事件和B事件就共享了一个过程段,从而达到了重用的目的。如果共享的程序段与发生该事件的控件无关,如 ShowMessage(′hello,world′),那这种共享是最简单的。但一般来说,代码段间的共享都跟发生该事件的控件有关,需要根据控件类型 做出相应的处理,这时就要用到Sender参数。
  每个过程段的开头都类似procedure TForm1?FormClick(Sender:TObject);其中的Sender是一个TObject类型的参数,它告诉Delphi哪个控件接 收这个事件并调用相应的处理过程。你可以编写一个单一的事件处理句柄,通过Sender参数和IF…THEN…语句或者CASE语句配合,来处理多个构 件。发生事件的构件或控件的值已经赋给了Sender参数,该参数的用途之一就在于:可以使用保留字IS来测试Sender,以便找到调用这个事件处理句 柄的构件或控件的类型。例如,将表单中编辑框和标签的Click事件的处理句柄都指向表单的xxx过程,编辑框和标签对Click事件有不同的反应:
  procedure TForm1?xxx(Sender:TObject);
  begin
  if(sender if Tedit) then
  showmessage(′this is a editbox′);
  if(sender is Tlabel) then
  showmessage(′this is a label′);
  end;
   Sender参数的第二个用途是结合AS操作符进行类型转换,将若干个派生于某一父类的子类强制转换成该父类。例如表单中有一个TEdit类控件和一个 TMemo控件,它们实际上都派生于TcustomEdit类,如果你要为二者的某一事件提供同样处理,可以将二者事件句柄都指向自定义的过程yyy:
  Procedure TForm1.yyy(Sender:TObject);
  begin
  (sender as TcustomEdit).text:=′This is some demo text′;
  end;
  在过程中,AS操作符将TEdit类和TMemo类均强制转换成TcustomEdit类,再对TcustomEdit类的属性赋值。注意这种转换必须符合Delphi中类的层次关系。

转载于:https://www.cnblogs.com/mdnx/archive/2012/05/23/2514951.html

Delphi中用Sender参数实现代码重用相关推荐

  1. java 重用性_提高Java代码重用性的三个方法

    三种修改现有代码提高其可重用性的方法,它们分别是:改写类的实例方法,把参数类型改成接口,选择最简单的参数接口类型. 措施一:改写类的实例方法 通过类继承实现代码重用不是精确的代码重用技术,因此它并不是 ...

  2. git前端工程实现ci_大前端项目代码重用,也许lerna是最好的选择

    我前段时间参与了一个react为主的大前端项目,覆盖Web.Android.Ios三个平台.由于整个业务逻辑侧重在手机端,且Web端也是到了项目中期才开始启动,我在搭底层框架时就没有考虑用类似reac ...

  3. java 代码重用_Java 代码重用:功能与上下文重用

    我几乎不需要讨论为什么重用代码是有利的.代码重用通常使得程序开发更加快速,并使得 BUG 减少.一旦一段代码被封装和重用,那么只需要检查很少的一段代码即可确保程序的正确性.如果在整个应用程序中只需要在 ...

  4. 代码重用_WebAssembly的速度和代码重用

    代码重用 想象一下,将用高级语言编写的非Web应用程序转换为可用于Web的二进制模块. 无需对非Web应用程序的源代码进行任何更改,即可完成此转换. 浏览器可以有效地下载新翻译的模块,并在沙箱中执行该 ...

  5. 【C++ Primer】第十四章 C++中的代码重用

    序:C++的一个主要目标是促进代码重用,其中包含公有继承.包含.使用私有或保护继承 一,包含对象成员的类        1)valarray类简介  #include <valarray> ...

  6. PHP代码重用与函数编写

    代码重用与函数编写 1.使用require()和include()函数 这两个函数的作用是将一个文件爱你载入到PHP脚本中,这样就可以直接调用这个文件中的方法. require()和include() ...

  7. 攻防对抗形势下代码重用技术的演进

    ,基于代码重用的程序执行方式被广泛用于漏洞攻击中, 用来绕过代码不可执行.动态代码签名等安全机制.图 2从时间维度给出了代码重用攻击的演变历程. Fig. 2 Evolution of binary ...

  8. 一起来学C++:C++中的代码重用

    目录 14.1 包含对象成员的类 14.1.1 valarray类简介 14.1.2 Student类的设计 14.1.3 Student类示例 1.初始化被包含的对象 2.使用被包含对象的接口 3. ...

  9. 番外篇--C++中的代码重用

    实现代码重用的一些方法(这里并不是全部): 包含(组合.层次化):类包含另一个类的对象 使用私有继承或保护继承 以上两种方法都用于实现has-a关系,常用第一种方法 多重继承可以使多个基类派生出一个新 ...

  10. 用Eclipse的snippets功能实现代码重用

    snippets功能实现代码重用 Snippets 代码片段是Eclipse的一个插件. 很多时候可以通过这个功能,重复使用常用的代码片段,加快开发效率. 创建一个代码段的步骤: 在Eclipse的e ...

最新文章

  1. 彻底明白IP地址——计算相关地址
  2. 通过Maven去运行单元测试
  3. ecshop 奇偶行显示不同的商品样式
  4. C语言文件操作(一)产生0~M范围内的N个随机数
  5. linux怎么用命令备份数据库,使用linux的mysqlhotcopy命令备份数据库
  6. 量化指标公式源码_通达信指标公式源码线上阴线指标公式
  7. C语言实现AES加解密算法
  8. 使用Python处理声音文件(一):让歌曲重复两次
  9. linux查看CPU高速缓存(cache)信息
  10. weightedrandomSamplers(1)
  11. 【实践】因果推断在快手推荐场景的应用探索.pdf(附下载链接)
  12. C语言:设计简单的计算器!
  13. illustrator插件--常用功能开发--条码生成--js脚本开发--AI插件
  14. officescan 不输入密码卸载
  15. 数据挖掘导论——综合实验
  16. SNMP Trap调试记录
  17. 云计算中网络基础知识(升级版)
  18. Windows 8如何关闭自动维护_-Chaz-_新浪博客
  19. vim End Home失效
  20. Android快速开关机

热门文章

  1. Caffe编译 Mnist训练测试---基本参数学习
  2. 用于函数优化的一维 (1D) 测试函数
  3. python实践gcForest模型对鸢尾花数据集iris进行分类
  4. 2021-06-29操作DOM元素
  5. 如何使用JdbcTemplate实现数据的增删改查?
  6. 【Django 2021年最新版教程30】django项目部署到华为云(nginx uWSGI mysql方式)
  7. FISCO BCOS Failed to connect to nodes: [ ssl hanshake failed:/192.168.64.131:20200]
  8. PHP二维数组按照指定的字段排序的函数
  9. bootstrap popover弹框内容换行
  10. linux挂载sata硬盘分区,Linux下挂载硬盘分区的几种方法