唤醒控件曾经拥有的能力

为什么80%的码农都做不了架构师?>>>   hot3.png


控件的祖先 TControl 有很多功能, 但它的有些子孙确丧失了很多(为了专用).

譬如 TBevel 就没有把一些常规的事件继承下来, 那些没有被继承的功能一般都隐藏在 protected 区, 如果重新继承是可以使用的.

这里尝试了另外一种方法: 自己没有继承时, 问一问有继承的兄弟、叔伯获取其它亲戚; 当然应先确保自己的祖先有该功能且没被覆盖过.

通过传统的继承法让 TBevel 相应双击事件:

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls;typeTForm1 = class(TForm)procedure FormCreate(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}typeTMyBevel = class(TBevel)protectedprocedure DblClick; override;end;procedure TMyBevel.DblClick;
begininherited;ShowMessage(ClassName);
end;//
procedure TForm1.FormCreate(Sender: TObject);
beginwith TMyBevel.Create(Self) dobeginLeft := 10;Top := 10;Parent := Self;end;
end;end.


先在窗体上添加一个 TBevel, 它没有双击事件, 问一问 TForm 吧:

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls;typeTForm1 = class(TForm)Bevel1: TBevel;procedure FormCreate(Sender: TObject);privateprocedure MyDbClick(Sender: TObject);publicend;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
beginTForm(Bevel1).OnDblClick := MyDbClick;
end;procedure TForm1.MyDbClick(Sender: TObject);
beginShowMessage(TComponent(Sender).Name);
end;end.


TBevel 通过 TForm 唤醒了对 OnMouseDown、OnMouseMove、OnMouseUp 的记忆, 从而实现被拖动的动能:

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls;typeTForm1 = class(TForm)Bevel1: TBevel;procedure FormCreate(Sender: TObject);privateprotectedprocedure MyMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);procedure MyMouseMove(Sender: TObject; Shift: TShiftState; X: Integer; Y: Integer);procedure MyMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);publicend;varForm1: TForm1;implementation{$R *.dfm}vara,b: Integer;f: Boolean;procedure TForm1.FormCreate(Sender: TObject);
beginTForm(Bevel1).OnMouseDown := MyMouseDown;TForm(Bevel1).OnMouseMove := MyMouseMove;TForm(Bevel1).OnMouseUp := MyMouseUp;
end;procedure TForm1.MyMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
beginf := True;a := X;b := Y;
end;procedure TForm1.MyMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
beginif f then with TControl(Sender) dobeginLeft := Left + X - a;Top := Top + Y - b;end;
end;procedure TForm1.MyMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
beginf := False;
end;end.

转载于:https://my.oschina.net/hermer/blog/320083

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

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

相关文章

Android 面向切面编程-aspjectj应用

先附上自己基于aspject封装的aop 插件 1.为什么要用切面 随着业务越来越复杂,项目中的模块可能越来越多, 面向切面可以减少模块间的耦合,提高模块的复用率 2.aspjectj语法 android aop框架 有好几种,不过aspjectj应该算最成熟了&…

c语言掌上通,计算机二级C语言掌上通在哪下载安装?计算机掌上通好用吗?

计算机二级C语言掌上通在哪下载安装?计算机二级C语言掌上通好用吗?相信很多想要考计算机二级C语言的学生都在努力的复习背题库,而现在只要使用计算机二级C语言掌上通就能够随时随地刷题了。一、计算机二级C语言掌上通怎么下载1、滑动手机&…

[原]RHCS集群的服务切换测试札记

估计使用Red Hat或者CentOS做HA集群的朋友多数都会选择RedHat Cluster Suite(RHCS)这个套件来做吧。本篇主要记录构建及测试时候的情况。 poweroff 和 reboot 这种常规操作的服务切换取决于 recovery"relocate" 这个参数,在图形化界…

理解 Delphi 的类(十) - 深入方法[17] - 提前声明

为什么80%的码农都做不了架构师?>>> //要点17: 如果前面的方法要调用后面的方法, 后面的方法需要提前声明 function MyFunB(x: Integer): Integer; forward; {使用 forward 指示字提前声明}function MyFunA(x: Integer): Integer; beginResult : MyFunB…

本地仓库推送到远程仓库:fatal: refusing to merge unrelated histories

最近,在操作git的时候,遇到各种问题,下面总结一下。 最开始,我不是先把远程仓库拉取到本地 ,而是直接在本地先创建一个仓库,再git remote add添加远程仓库。 当然,gitee官方还是有操作指南&…

c语言全段字符的类别,言语理解规律整理d0c.doc

言语理解规律整理d0cAUTOTEXT "第 X 页 共 Y 页" \* MERGEFORMAT 第 PAGE 14 页 共 NUMPAGES 14 页言语理解规律整理言语理解之广义主旨题 :  主要的提问方式有:“主要说明、主要意思、主要谈论、主要讲述、核心意思、主要表达、主要告诉我们”这些表达…

小小闹钟wpf版

以前做过一个vc版的,最近看了一下wpf,于是有在这个模式下重写了程序,算是一个练习,工程下载地址:http://cid-fbe22b5b41948219.skydrive.live.com/self.aspx/.Documents/clock.rar转载于:https://www.cnblogs.com/hxf8…

C#开发微信门户及应用(18)-微信企业号的通讯录管理开发之成员管理

在上篇随笔《C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理》介绍了通讯录的部门的相关操作管理,通讯录管理包括部门管理、成员管理、标签管理三个部分,本篇主要介绍成员的管理操作,包括创建、删除、更新、获取、获取部门成…

IDEA 运行spingboot时出现Process finished with exit code -1073741819 (0xC0000005)

经过多方查证,问题最终定位在金山词霸2016上,如果开启了金山词霸的取词和划意功能,就会出现此错误,估计是冲突吧。 解决办法:关掉金山词霸,或者把金山词霸的取词和划意功能关掉。经过尝试,发现只…

转载--【笔记】Asp.Net构架(Http请求处理流程)

转载--【笔记】Asp.Net构架(Http请求处理流程) 最近接触了一些Asp.Net开发人员,在聊到技术的时候,发现很多的Asp.Net开发人员都不明白在ASP.NET中一个页面请求的处理流程,今天自己在反思的过程中,发现我自己对这个也是一知半解&am…

语法分析器c语言 递归子程序,RecursiveSubroutine

RecursiveSubroutine介绍编译原理语法分析——递归下降子程序类,C实现。实验说明一、实验目标分别采用自顶向下和自底向上两种语法分析方法,编制一个语法分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析实验内容。二、实验…

SSL/TLS协议运行机制的概述

互联网的通信安全,建立在SSL/TLS协议之上。 本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和运行过程,不涉及具体的实现细节。如果想了解这方面的内容,请参阅RFC文档。 一、作用 不使用SSL/TLS的HTTP通信,就是不加密的…

margin塌陷

一:什么是margin塌陷 在标准文档流中,竖直方向的margin会出现叠加现象(水平方向不会塌陷),两个margin紧挨着,中间没有border或者paddingmargin直接接触,就产生了合并表现为较大的margin会覆盖掉…

c语言幼儿园管理系统,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼编写程序,登录幼儿园200个小朋友的数据:姓名、性别、年龄、身高、体重、出生日期,分别按年龄排序后输出。要求:(1)登录数据用函数input()(2)按身高排序用函数sort()(3)输出排序结果用…

[转载]EXT核心API详解(一)-Ext

Ext类addBehaviors( Object obj ) : void对选择的元素 应用事件侦听器,事件名以附加在结尾,例如addBehaviors({// idfoo下所有的a标签加入click事件#foo aclick : function(e, t){// do something},// 用,分隔多个选择器#foo a, #bar span.some-classmouseover : function(){//…

Redis链表实现

链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层实现。除了链表键之外, …

获取当前日期0点及23点59的时间戳

1.获取今天0点时间戳: const start new Date(new Date(new Date().toLocaleDateString()).getTime()); //如果不是当天换成你想获取0点的时间即可。 console.log(start); 2.获取今天23:59:59点时间戳: const start new Date(new Date(new Date(…

android 6.0 api 管理,Android 6.0(API23)权限申请问题

1.在API23以上,不止要在AndroidManifest.xml里面添加权限2.还要在JAVA代码中请求权限:// Storage Permissionsprivate static final int REQUEST_EXTERNAL_STORAGE 1;private static String[] PERMISSIONS_STORAGE {Manifest.permission.READ_EXTERNAL…

ecos内核概览--bakayi译

http://blog.csdn.net/wangzaiwei2006/article/details/6453423

linux optimizer,linux命令1—安装optimizer(示例代码)

ZendChina官方:下面介绍一下关于在linux环境下Zend Optimizer 3.3的安装方法。本篇文章是基于RHEL5架构的linux系统。(1)ZendOptimizer 3.3.3版本的安装。ZendOptimizer 3.3.3下载地址:安装:# wget http://down1.chinaunix.net/distfiles/Zen…