B
Bahl
Unregistered / Unconfirmed
GUEST, unregistred user!
[h2] 不用注册新的组件添加新的方法和属性[/h2]
有时我们要给一个已存的组件添加新的方法与属性(或是改变已存的属性的可见性)。方法之一就是修改这个组件,但是这意味着我们不得不重新编译它的包,如果我们想让我们的应用程序能被他人编译的话,还得重新分发修改过的组件,这的确是一件很麻烦的事情。有时我们没有组件的源代码,想给它添加新的方法与属性简直连门都没有。在这些情况下,从组件派生出子类再给子类添加新的方法和属性则是一个更好的方法。举个例子:type
TEditX = class(TEdit)
public
function GetForeColor: TColor;
procedure SetForeColor(color: TColor);
property ForeColor: TColor read GetForeColor write SetForeColor;
end;
这些方法可以这样实现:
function TEditX.GetForeColor: TColor;
begin
Result := Font.Color;
end;
procedure TEditX.SetForeColor(color: TColor);
begin
Font.Color := Color;
end;
这当然是个很简单的例子,但是它很好地体现了这种思想。
我们不需要将这个新组件安装到组件面板上去,也不需要在我们的应用程序中替换已经存在的控件。当我们需要访问新的属性与方法时,只需要将对象(比如Edit1)转换为我们的新类。比如:
TEditX(Edit1).ForeColor := clRed;
或:
TEditX(Edit1).SetForeColor(clRed);
警告:这种转换只有在新类添加了新的属性与方法,但没有添加新的字段或新的虚拟或动态方法时才起作用,尽管从理论上来说你能覆盖已存的虚拟方法。