如何给TObject(或TComponent)加个我自己定义的属性?(300分)

  • 主题发起人 主题发起人 sslxml
  • 开始时间 开始时间
S

sslxml

Unregistered / Unconfirmed
GUEST, unregistred user!
我想给 TComponent(注意不是给它的派生类)加个我自己定义的属性,如一个字符串,
这个属性是 Published 的,我想得到的效果是在所有的TComponent的派生类中都可以
看见这个属性(在属性查看器中),请问如何做到?我只有320的积分,如果有好的方
法,我愿意全部奉上我的积分。

顺便问一个问题:如何重新编译Delphi提供的组件(如:TButton)?不是派生,而是
替换?
 
似乎是不能重新编译的。除非你先将包卸载了,然后新创建一个包,加入你改写后的代码注册组件。

TObject似乎不能修改的,它在System单元中
 
不要改动标准控件 Interface 部分的代码,你的修改即使编译了,在设计时也看不见这些
修改的,IDE 设计时直接使用了 VCLXX50.bpl 等标准包,标准控件的代码已经编译进
这些包中了,而没有这些包的源文件,你就不能将你的修改编译进去。
你可以将 VCL 源文件拷贝到你的工程所在的目录,修改后再编译,运行时就可以访问新定
义的属性。但设计时是看不见这些修改的。
TObject 在 System 单元中定义,但 Borland 的编译器不让你编译一个名为 System 的单元,
因为其中定义的一些结构和类如 TObject,在编译器中也要用到的,必须保证这些结构是不
会变的。因此不能改 TObject。
但是 KOL 的作者提供了一个精简版的 System.dcu,不知他是怎么做到的。
 
Thank you!

我认为这就是 Borland 的不对了,既然 VCL 的源码都公开了,就应该想个办法能让
别人改进它才对,即使不让别人改,也不能使编译器对 System.pas 不工作呀。唉,
本想偷工减料在 TComponent 上加个属性,其他组件都能用了新功能了,现在只有想
别的办法了。

to: bbkxjy

那个 System.dcu 可能是用与 Delphi 兼容的其他编译器编译的,或者是用 C++ 编
译成特殊版本,然后改造的,甚至使用汇编也可以做同样的工作,只要不用 Delphi
编译自己就成。这是不是也说明在 Delphi 的编译器中使用了什么非常规技术了?
哈哈,又瞎猜了。

总之,谢谢二位的答复。
 
后退
顶部