可能重复:
在delphi 中替换组件类
有人有什么技巧可以修改VCL组件并使其在IDE中相对默认吗?这意味着不一定是从它们开始的,而是在似乎不允许在子对象中进行此类操作的地方更改功能。如果它们可以用来代替标准组件,那也是一个额外的好处。
例如,我想做的一件事是在TButton上进行alpha混合鼠标悬停。我注意到没有OwnerDraw事件,修改按钮绘制方式的代码似乎不在我可以覆盖的位置。有什么建议吗?还是我必须从VCL代码中删除TButton及其所有祖先并直接修改它?
您可以选择以下方法之一:
- 覆盖表单的
ReadState
,如下所述 - 使用插入器类,如此处和此处所述
- 分配一个新的
WindowProc
,如下所述
您提出了几个与开发自定义V.C.L.控件有关的问题。
由于,这是一个非常扩展的主题,你可能想浏览或搜索有关它的互联网。
作为一个快速问题,有几种方法可以开发或扩展控件。
有时可以以不同的方式开发相同的控制,另一方面,这取决于你想要开发的控制类型。
您还提到了如何进行控制,与Delphi I.D.E.交互
Delphi控件与包一起工作,你可以用没有控件的普通库制作一个包,你可能想在制作控件之前开始这样做。
您可以制作一个控件,它根本不交互,只能通过运行应用程序来工作,然后添加与Delphi I.D.E.的交互
在Delphi中,当你开发一个控件并想把它放在窗体上时,在内部设计时,它就像Delphi是你的应用程序,并且已经拥有了你的控件。
如果您想更改应用程序中所有TB按钮的外观,您可以在根本不修改VCL的情况下进行更改。当存在几百个按钮组件时,我认为没有必要自己修改甚至子类化VCL控件。例如,对于alpha混合鼠标悬停,只需检查TMS控件即可。
然而,对于自己动手的技术;方法一(推荐为简单的方法(是简单地从应用程序中取出所有的T按钮,并用其他东西替换它。VCL组件更换(全球(可通过gExperts轻松完成。要了解如何将标准控件外观(按钮的外观(与Delphi代码中绘制的一些覆盖元素相结合,请参见TBitBtn示例。与其将TButton或TCustomButton子类化,我建议您检查TBitBtn源,并从中开始
方法二(不建议这么简单(是开始使用蒙皮系统,该系统可以绘制与标准控件完全不同的外观。