文档章节

唤醒控件曾经拥有的能力

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 489
阅读 8
收藏 0
点赞 0
评论 0

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

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

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

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

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  TMyBevel = class(TBevel)
  protected
    procedure DblClick; override;
  end;

procedure TMyBevel.DblClick;
begin
  inherited;
  ShowMessage(ClassName);
end;

//
procedure TForm1.FormCreate(Sender: TObject);
begin
  with TMyBevel.Create(Self) do
  begin
    Left := 10;
    Top := 10;
    Parent := Self;
  end;
end;

end.


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

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Bevel1: TBevel;
    procedure FormCreate(Sender: TObject);
  private
    procedure MyDbClick(Sender: TObject);
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  TForm(Bevel1).OnDblClick := MyDbClick;
end;

procedure TForm1.MyDbClick(Sender: TObject);
begin
  ShowMessage(TComponent(Sender).Name);
end;

end.


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

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Bevel1: TBevel;
    procedure FormCreate(Sender: TObject);
  private
  protected
    procedure 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);
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  a,b: Integer;
  f: Boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TForm(Bevel1).OnMouseDown := MyMouseDown;
  TForm(Bevel1).OnMouseMove := MyMouseMove;
  TForm(Bevel1).OnMouseUp := MyMouseUp;
end;

procedure TForm1.MyMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  f := True;
  a := X;
  b := Y;
end;

procedure TForm1.MyMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if f then with TControl(Sender) do
  begin
    Left := Left + X - a;
    Top := Top + Y - b;
  end;
end;

procedure TForm1.MyMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  f := False;
end;

end.

本文转载自:http://www.cnblogs.com/del/archive/2011/05/12/2044112.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
rt-thread的IPC机制之事件源码分析

1 前言 事件主要用于线程间的同步,与信号量不同,它的特点是可以实现一对多,多对多的同步。即一个线程可等待多个事件的触发:可以是其中任一一个事件进行触发唤醒线程进行事件的处理操作;...

长平狐 ⋅ 2013/03/19 ⋅ 0

将PDA矢量图控件开源

    今将PDA矢量图控件开源。该控件是一个矢量图展示性控件,这是根据需求而定的,因此我没有加上一些实时的编辑操作的支持。该控件是在2007年3月份到4月之间完成的。其效果如图所示:(...

hoodlum1980 ⋅ 2010/10/25 ⋅ 0

Winforms 应用控件管理器--ComponentOne_Winform

为Windows Forms应用系统开发提供了60多个包括表格、报表、图表、数据输入、编辑器、数据验证、时间、日期、UI、日程表、导航等组件或控件,这些组件不仅弥补了标准控件包的空白,而且拥有更...

葡萄城控件技术团队 ⋅ 2014/07/21 ⋅ 1

测评 | 小度智能音箱的性价比究竟「高」在了哪里?

  机器之心原创   撰文:高静宜      在这场悄然打响的智能音箱价格战上,百度终于拿出了自己的王牌。      「89 元,这只是酒店菜单上一份凉拌豆腐丝的价格啊。」   在 6 月 ...

机器之心 ⋅ 06/15 ⋅ 0

从童心,到智心:百度、亚马逊、谷歌、微软为何都瞄准了儿童AI?

又一年儿童节来临,朋友圈开始满屏“晒娃”,以及“晒节”。 这个年头,教育孩子这件事那可是越来越讲究了。 随着所谓的“起跑线”提的越来越前,家长们的负担也在与日俱增。当年幼儿教育无非...

脑极体 ⋅ 06/01 ⋅ 0

也许是国内最全“智能音箱”评测,教你如何选 AI 音箱?

雷锋网按:本文授权转载自公众号声学在线(微信号:soundonline),作者木京,原标题为《视频 | 国内最全的“智能音箱”评测,教你如何选 AI 音箱?》。声学在线专注于声学与人工智能技术创新...

王金许 ⋅ 2017/09/05 ⋅ 0

Ubuntu 9.10 RC 发布

明明是过两天就要发布正式版了,今天还来了个RC版,我估计这个版本跟正式版已经没什么区别了。 下载地址: ubuntu-9.10-rc-desktop-i386.iso (687MB, torrent) ubuntu-9.10-rc-desktop-amd6...

红薯 ⋅ 2009/10/23 ⋅ 4

ComponentOne ASP.NET Wijmo 控件管理器

Wijmo 控件管理器 观察Studio for ASP.NET Wijmo的运行过程可发现,它管理着所有Studio for ASP.NET的新UI控件。简单的选择一个左边面板上的控件,就可以查看它内置的特性和功能。您可以改变...

葡萄城控件技术团队 ⋅ 2014/07/21 ⋅ 0

京东叮咚mini2技术解析:79元的软硬件会有怎样的效果?

2018年,智能音箱已成为新风口,市场呈现群雄并战的局面。前不久,京东叮咚发布了京东叮咚PLAY和mini2两款智能音箱新品,其中京东叮咚mini2在活动期间的价格仅为79元,可以说是这个价位上比较...

子夜梦的死寂 ⋅ 05/26 ⋅ 0

【《降临》作者批硅谷正变成恶魔】提起超级AI时,硅谷想到的是资本主义

今年夏天,Elon Musk发表了演讲,说“人工智能是人类文明存在的根本风险。” 马斯克举了一个人工智能摘草莓的例子。这个AI的使命就是采摘草莓。这看起来似乎是无害的,但随着AI重新设计自己,...

技术小能手 ⋅ 2017/12/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Day 17 vim简介与一般模式介绍

vim简介 vi和Vim的最大区别就是编辑一个文件时vi不会显示颜色,而Vim会显示颜色。显示颜色更便于用户编辑,凄然功能没有太大的区别 使用 yum install -y vim-enhanced 安装 vim的三种常用模式...

杉下 ⋅ 29分钟前 ⋅ 0

【每天一个JQuery特效】根据可见状态确定是否显示或隐藏元素(3)

效果图示: 主要代码: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>根据可见状态确定 是否显示或隐藏元素</title><script src="js/jquery-3.3.1.min.js" ty......

Rhymo-Wu ⋅ 38分钟前 ⋅ 0

OSChina 周四乱弹 —— 初中我身体就已经垮了,不知道为什么

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @加油东溪少年 :下完这场雨 后弦 《下完这场雨》- 后弦 手机党少年们想听歌,请使劲儿戳(这里) @马丁的代码 :买了日本 日本果然赢了 翻了...

小小编辑 ⋅ 57分钟前 ⋅ 8

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部