为什么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

唤醒控件曾经拥有的能力相关推荐

  1. Flutter 自定义UI控件并设置交互能力

    1.自定义UI控件 首先UI控件按照是否能够与用户交互分为交互型控件和非交互型控件. 下面就是创建了一个交互型控件,只是关于界面是空的,如果我们继承StatelessWidget就是创建了一个非交互型 ...

  2. ASP.NET重用代码技术 - 用户控件技术

    作者: 苏红超 使用ASP.NET中的代码绑定技术来使得代码重用变得简单可行.我们发现,利用代码绑定技术我们可以容易的将我们的代码和内容分离开来,利用它可以建立可重用的代码,只是这种技术本身也存在着一 ...

  3. 用户控件和自定义控件

    关 键 词 Server Control 服务器控件 User Control 用户控件,ASP.NET服务器控件的一种(一般后缀名为.ASCX文件) Custom Control 自定义控件,ASP ...

  4. 使用ActiveX控件开发网页常见的问题

    1. 什么是ActiveX 控件? Microsoft® ActiveX™ 控件是由软件提供商开发的可重用的软件组件.使用 ActiveX控件,可以很快地在网址.台式应用程序.以及开发工具中加入特殊的 ...

  5. 探讨ASP.NET2.0中的Web控件改进技术

    全面探讨ASP.NET 2.0中的Web控件改进技术之概述(一) ASP.NET 2.0并没有抛弃1.1版本中的任何现有控件,而是增加了一组新的控件;同时还引入了若干新的控件开发技术.本系列文章将对这 ...

  6. WPF(6)WPF之TextBox控件

    系列文章目录 WPF(1)WPF工程创建 WPF(2)WPF之Image组件 WPF(3)WPF之Button组件 WPF(5)WPF之DataGrid控件 文章目录 系列文章目录 TextBox控件 ...

  7. c#模拟看板控件_ComponentOne for Winform

    WinForm UI 控件集 WinForm UI 控件集 快速创建直观.现代的 Windows 窗体应用程序 ComponentOne for WinForm 控件集为 WinForm 应用程序提供 ...

  8. 【Asp.net】——Web控件与HTML控件的区别

    在看Asp.net视频的过程中,遇到对控件的一些解释,通过查询资料,简单的说说这二者的区别. 控件位置 在VS中,HTML控件位置在: Web控件位置: 控件样式 HTML控件: 除了几个特殊的控件: ...

  9. Win32窗体控件方法与消息

    在Windows中,每个窗体的子控件也称之为窗体,创建一个控件的方法是CreateWindow 控件公共方法 如GetWindowText,EnableWindow等方法,几乎每个控件都拥有这些特性, ...

最新文章

  1. 几个比较冷门的prototype扩展方法:去掉html标签、去掉a标签、去掉style样式,以及判断是否为html代码的代码片段
  2. 网购切莫小看1毛钱 暗藏信用卡诈骗玄机
  3. 国服被ban咋看_王者荣耀:赵云不会玩?完美详细攻略教学,看完助你轻松上王者...
  4. 【五线谱】变音记号 ( 升号 # | 降号 b | 重升号 x | 重降号 bb )
  5. 阿里首席架构师科普RPC框架是什么
  6. if something reaches the top
  7. 阿里云mysql5.7 窗口函数_关于阿里云centos版本,mysql5.7的一些注意事项
  8. Solve The Maze CodeForces - 1365D(贪心+dfs)
  9. MYSQL基础十一--存储引擎
  10. 不是你无法入门自然语言处理,而是你没找到正确的打开方式
  11. 【图像隐写】基于matlab GUI变换域的可逆数字水印系统设计【含Matlab源码 1813期】
  12. scrapy -selector
  13. 超简单的html登录界面
  14. 郑义宣就任韩国现代汽车集团会长;爱立信携手中国电信运用爱立信频谱共享技术 | 美通企业日报...
  15. NRF52840学习——GPIO输入,实现按键短按和长按
  16. 苹果电脑是“监狱”、弃用 Ubuntu,GNU 创始人斯托曼谈自由软件运动现状
  17. VCIP2020:SCC编码工具的优化实现
  18. css清除浮动的四种方法(详细)
  19. 将InfoSphere Guardium数据编辑与IBM分类模块集成
  20. 电池保护板 - 问题归纳

热门文章

  1. 五种方法提高你的智力
  2. Code Review的重要性
  3. 设置Jexus开机启动
  4. web-8. 多框架页面的创建
  5. mysql在linux下的安装(5.7版本以后)
  6. Spark 2.2.0 文档中文版 Collaborative Filtering 协同过滤 JAVA推荐系统
  7. 关于iOS 3D touch 指纹验证的随笔
  8. .NET 数据库缓存依赖策略实现
  9. javaScript事件(一)事件流
  10. d3.js 制作简单的俄罗斯方块