Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)

本例效果图:



代码文件:


unit Unit1;

interface

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

type
  TMyShape = class(TShape)
  protected
    procedure CMMouseenter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseleave(var Message: TMessage); message CM_MOUSELEAVE;
  end;

  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  W = 50;
  H = 50;
var
  shape: TMyShape;
begin
  shape := TMyShape.Create(Self);
  shape.Parent := Panel1;
  shape.Width := W;
  shape.Height := H;
  Randomize;
  shape.Left := Random(Panel1.ClientWidth - W);
  shape.Top := Random(Panel1.ClientHeight - H);
  shape.Brush.Color := Random($FFFFFF);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
begin
  if Panel1.ControlCount = 0 then Exit;
  Randomize;
  i := Random(Panel1.ControlCount - 1);
  Panel1.Controls[i].Free;
end;

{ TMyShape }

procedure TMyShape.CMMouseenter(var Message: TMessage);
const
  s = ‘当前 %s 的颜色值是: %.6x‘;
var
  WCtrl: TWinControl;
begin
  WCtrl := Parent;
  while WCtrl.HasParent do WCtrl := WCtrl.Parent;
  if WCtrl is TForm then TForm(WCtrl).Caption := Format(s, [ClassName,Brush.Color]);
  inherited;
end;

procedure TMyShape.CMMouseleave(var Message: TMessage);
const
  s = ‘Form1‘;
var
  WCtrl: TWinControl;
begin
  WCtrl := Parent;
  while WCtrl.HasParent do WCtrl := WCtrl.Parent;
  if WCtrl is TForm then TForm(WCtrl).Caption := s;
  inherited;
end;

end.

http://www.cnblogs.com/del/archive/2008/10/23/1317926.html

时间: 2024-10-20 04:53:30

Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)的相关文章

面向对象【day07】:类的属性-继承-经典类

本节内容 类的公有属性 析构函数 类的继承 新式类和经典类 一.类的公有属性 一.概述 前面我们讲了类的私有属性,现在我们来说说类的公有属性,这边很容易被人弄混淆,有人觉的,在__init__()构造方法中,除了私有属性,其他的都是公有属性了,其实这是一个错误的结论,并不是定义在__init__()初始化方法中的属性是公有属性(除私有属性),那什么是公有属性呢?揭起了大家的好奇心. 定义:指的是所属这个类的所有对象,都可以访问的属性,叫做公有属性. 二.公有属性 2.1 定义 说明:在类中直接定

php函数、类和对象以及类的封装、继承、类的静态方法、静态属性

1.函数     php内置函数可以直接使用,如果没有安装php扩展即可     自定义函数 //函数function 函数名 function dump($var = null){ //支出默认参数值 echo '<pre/>'; var_dump($var); } 2.类(class)和对象( new Obj) <?php //定义一个人的类,现在还不是对象 class Person { //私有属性 private $eye = '大眼睛'; private $mouth = '小

复习 模块 类 属性 方法 继承

什么是模块? 包 系统模块: 系统中有个sys模块 根据sys模块的path属性方法,可以获取模块的位置. import sys 当我们导入模块的时候,会从上面目录一次查找. 我们大部分模块都在 /usr/lib64/python2.*/ 目录下能够找到 比如: os模块 string模块 也可以自定义python的path(模块目录) 创建目录 将目录加入sys.path 查看: 另外一种方法,修改系统的环境变量: 执行使环境变量生效: 查看: 验证: 我们自己写的脚本都可以作为模块来使用:

继承和类设计

========================== ========================== oc是一门面向对象的语言,面向对象编程有三大特性:封装.继承.多态 一.封装 [注]封装就是把某些解决一些问题的代码进行模块化,对外部暴露一个接口.我们都称为封装了一个方法: [优点] 1.封装可以增强代码的复用度. 2.封装可以有效提高开发速度. 二.继承 子类拥有了父类的方法和属性的情况,我们称为继承: A:B(读作:A类继承B类,也就A类拥有了B类的方法和属性) [优点] 1.不用书

关于对象的行为、数组、继承和类的高级概念

1.对象的行为:                   (1)方法调用栈:所有的方法调用都维护在一个称为调用栈的结构中. 第一个被调用的方法就是main(),该方法是Jvm调用的,因此main()方法总是在调用栈的底部. (2)调用方法:一个方法被调用时该方法就放在调用栈的顶部,知道方法执行完成. 三种情况:①方法返回一个值:一个基本数据类型或一个引用数据类型被传回给方法的调用者: ②方法不返回一个值:返回值被声明为void:  ③方法抛出一个异常给方法的调用者. Java中的方法只能出现在类中,

(WPF)属性值继承

属性值继承并不同于传统面向对象的类继承,而是指属性值自顶向下沿着元素树传递. 下面的代码在Window 元素上设置了Font属性.两个设置将会沿着逻辑树向下传递,并由子元素继承. 但是若子元素如设置了这样的属性,则不受其父元素设置的影响. <span style="font-size:14px;"> </span><span style="font-size:12px;"><Window xmlns = "http

19._7泛型继承之泛型类继承普通类

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _19._7泛型继承之泛型类继承普通类 { abstract class genClass<T> { protected T field; public virtual T property { get { return field; } } p

CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?

1.CSS选择符有哪些? 类型选择符(body).群组选择符(h1,h2,h3,span).包含选择符(h2 span).ID选择符(#id).Class选择符(.content) 2.哪些属性可以继承? CLASS属性,伪类A标签,列表ul.li.dl.dd.dt可以继承 3.优先级算法如何计算? 优先级就近原则 版权声明:本文为博主原创文章,未经博主允许不得转载.

模板类继承模板类

今天写的代码提交到OJ上就出现这样的错误,但是vs并不会出错. '_elem' was not declared in this scope 原因在于模板类继承模板类,子类看不见父类的成员. 但是VC++做了一些小拓展,可以不适用this->就调用父类成员. gcc在扫描到模板类时就要求确定每一个成员在哪里声明的,VC++在类实例化之后再检测,就不会有这个问题. 可以使用以下方式解决: 方法1: 使用this template<typename T> class A { protecte