唤醒控件曾经拥有的能力
为什么80%的码农都做不了架构师?>>>
控件的祖先 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
唤醒控件曾经拥有的能力相关推荐
- Flutter 自定义UI控件并设置交互能力
1.自定义UI控件 首先UI控件按照是否能够与用户交互分为交互型控件和非交互型控件. 下面就是创建了一个交互型控件,只是关于界面是空的,如果我们继承StatelessWidget就是创建了一个非交互型 ...
- ASP.NET重用代码技术 - 用户控件技术
作者: 苏红超 使用ASP.NET中的代码绑定技术来使得代码重用变得简单可行.我们发现,利用代码绑定技术我们可以容易的将我们的代码和内容分离开来,利用它可以建立可重用的代码,只是这种技术本身也存在着一 ...
- 用户控件和自定义控件
关 键 词 Server Control 服务器控件 User Control 用户控件,ASP.NET服务器控件的一种(一般后缀名为.ASCX文件) Custom Control 自定义控件,ASP ...
- 使用ActiveX控件开发网页常见的问题
1. 什么是ActiveX 控件? Microsoft® ActiveX™ 控件是由软件提供商开发的可重用的软件组件.使用 ActiveX控件,可以很快地在网址.台式应用程序.以及开发工具中加入特殊的 ...
- 探讨ASP.NET2.0中的Web控件改进技术
全面探讨ASP.NET 2.0中的Web控件改进技术之概述(一) ASP.NET 2.0并没有抛弃1.1版本中的任何现有控件,而是增加了一组新的控件;同时还引入了若干新的控件开发技术.本系列文章将对这 ...
- WPF(6)WPF之TextBox控件
系列文章目录 WPF(1)WPF工程创建 WPF(2)WPF之Image组件 WPF(3)WPF之Button组件 WPF(5)WPF之DataGrid控件 文章目录 系列文章目录 TextBox控件 ...
- c#模拟看板控件_ComponentOne for Winform
WinForm UI 控件集 WinForm UI 控件集 快速创建直观.现代的 Windows 窗体应用程序 ComponentOne for WinForm 控件集为 WinForm 应用程序提供 ...
- 【Asp.net】——Web控件与HTML控件的区别
在看Asp.net视频的过程中,遇到对控件的一些解释,通过查询资料,简单的说说这二者的区别. 控件位置 在VS中,HTML控件位置在: Web控件位置: 控件样式 HTML控件: 除了几个特殊的控件: ...
- Win32窗体控件方法与消息
在Windows中,每个窗体的子控件也称之为窗体,创建一个控件的方法是CreateWindow 控件公共方法 如GetWindowText,EnableWindow等方法,几乎每个控件都拥有这些特性, ...
最新文章
- 几个比较冷门的prototype扩展方法:去掉html标签、去掉a标签、去掉style样式,以及判断是否为html代码的代码片段
- 网购切莫小看1毛钱 暗藏信用卡诈骗玄机
- 国服被ban咋看_王者荣耀:赵云不会玩?完美详细攻略教学,看完助你轻松上王者...
- 【五线谱】变音记号 ( 升号 # | 降号 b | 重升号 x | 重降号 bb )
- 阿里首席架构师科普RPC框架是什么
- if something reaches the top
- 阿里云mysql5.7 窗口函数_关于阿里云centos版本,mysql5.7的一些注意事项
- Solve The Maze CodeForces - 1365D(贪心+dfs)
- MYSQL基础十一--存储引擎
- 不是你无法入门自然语言处理,而是你没找到正确的打开方式
- 【图像隐写】基于matlab GUI变换域的可逆数字水印系统设计【含Matlab源码 1813期】
- scrapy -selector
- 超简单的html登录界面
- 郑义宣就任韩国现代汽车集团会长;爱立信携手中国电信运用爱立信频谱共享技术 | 美通企业日报...
- NRF52840学习——GPIO输入,实现按键短按和长按
- 苹果电脑是“监狱”、弃用 Ubuntu,GNU 创始人斯托曼谈自由软件运动现状
- VCIP2020:SCC编码工具的优化实现
- css清除浮动的四种方法(详细)
- 将InfoSphere Guardium数据编辑与IBM分类模块集成
- 电池保护板 - 问题归纳