惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
罗磊的独立博客
T
The Blog of Author Tim Ferriss
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
Last Week in AI
Last Week in AI
美团技术团队
Google Online Security Blog
Google Online Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
月光博客
月光博客
L
LINUX DO - 最新话题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
W
WeLiveSecurity
H
Heimdal Security Blog
Vercel News
Vercel News
SecWiki News
SecWiki News
Forbes - Security
Forbes - Security
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
TaoSecurity Blog
TaoSecurity Blog
T
Troy Hunt's Blog
A
About on SuperTechFans
C
Check Point Blog
S
Security Affairs
Hacker News - Newest:
Hacker News - Newest: "LLM"
AI
AI
WordPress大学
WordPress大学
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Help Net Security
Help Net Security
博客园_首页
The Last Watchdog
The Last Watchdog
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Engineering at Meta
Engineering at Meta
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
I
Intezer
K
Kaspersky official blog
M
MIT News - Artificial intelligence
J
Java Code Geeks
G
GRAHAM CLULEY
P
Palo Alto Networks Blog

博客园 - monkeyking

The Future of the Delphi Compiler 一个人的旅行 为了缅怀Borland Delphi!!! 中国元素的指环王-观功夫之王 潮湿的长沙 在春天,我用秋来诱惑你 观姜文新片有感 会飞的猪肉 永远的红色蒸汽机 公主 真实与谎言 2年 关于磨洋工 十三陵-后海 2007-5-15 小区散记 [整理]令人澎湃之油画 生活就像…… 五一的生活
可视控件不重新注册情况下扩展其功能
monkeyking · 2007-04-25 · via 博客园 - monkeyking

这是答应QQ群“Delphi之幽冥魔焰2”要写的东西。今天终于心平气和,能够做点事情了。

我们的开发中可能会遇到这样一个问题,比如我的窗体已经写好了,但是突然变更了需求,导致希望某个窗体的可视控件拥有一个新的功能,以便操作。例如我的窗体上有很多个Image控件,此时需要每个Image都有一个Filename属性,以便记录这些Image中的图片来源。通常有两种做法,一是自己再写一个拥有此项属性的Image控件,注册到IDE中,然后重新修改原来设计好的窗体;另外一个办法就是单独设置变量来记录这些Filename和他们对应的Image,这种方法只需要改动代码,而不需要修改界面,可是这些数据管理起来又很麻烦。那么下面我就要隆重介绍一下新的办法了。既不需要重新修改界面,又能让TImage具有Filename属性。直接给代码,然后大家去试一下。呵呵。

unit Unit1;

interface

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

type
  TImage = class(ExtCtrls.TImage)
  public
    FileName: string;
  end;

  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Image1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.FileName := 'c:\123.bmp';
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
  ShowMessage(Image1.FileName);
end;

end.

其操作顺序是,先设计好窗体,也就是窗体上首先存在一个标准的TImage控件(这样符合上述问题的需求)。然后运行代码。一切如我们所愿。

基本原理是依赖于变量和类的作用域规定,也就是说,在上述例子单元中的Unit1.TImage类声明拥有最高优先级。所以代码在分析和创建TImage时,是按照Unit1.TImage创建的。但是另外一个问题,界面设计器明明使用的是ExtCtrls.TImage。没错,但是需要注意的是,编译器只是按照代码进行编译(dfm文件,dpr文件,pas文件等),而不会关心你再界面设计器上的操作过程,所以,虽然你再界面上放的是ExtCtrls.TImage,但是当持久化到dfm里以后,他仅仅是保存为TImage,于是编译器按照优先级高低,首先匹配了Unit1.TImage。于是我们的代码运行正常。

声明:以上内容纯属本人无验证推理过程。相信者,一切后果自负。哈哈。