|
Agregando nuevos métodos y propiedades sin registrar nuevos componentes
Copyright © 2000 Ernesto
De Spirito
Agregando nuevos métodos y propiedades
Algunas veces necesitamos agregar nuevos métodos y propiedades a un
componente existente. Una forma de hacerlo es modificando el componente,
pero esto implica tener que recompilar su paquete y luego tendríamos
que distribuir los cambios si quisiéramos que nuestra aplicación
pueda ser compilada por otros, y eso sería una molestia para los
receptores. A veces ni siquiera tendremos esa elección ya que hasta
podemos no contar con el código fuente.
En estas situaciones, mejor sería subclasar (derivar) el componente
y agregar nuevas propiedades y métodos. Por ejemplo:
type
TEditX = class(TEdit)
public
function GetForeColor: TColor;
procedure SetForeColor(color: TColor);
property ForeColor: TColor read GetForeColor write SetForeColor;
end;
Estos métodos podrían ser implementados como se muestra a continuación:
function TEditX.GetForeColor: TColor;
begin
Result := Font.Color;
end;
procedure TEditX.SetForeColor(color: TColor);
begin
Font.Color := Color;
end;
Se trata de un ejemplo tonto, por supuesto, pero sirve al propósito.
Castando a la nueva clase
No necesitamos instalar este nuevo componente, registrarlo en la paleta
de componentes ni sustituir componentes existentes en nuestra aplicación
(lo que sería una penalidad impagable). En lugar de ello, cada vez que
querramos acceder a las nuevas propiedades y métodos, podemos simplemente
castar (convertir) el objeto (por ejemplo Edit1) a nuestra
nueva clase. Por ejemplo:
TEditX(Edit1).ForeColor := clRed;
o
TEditX(Edit1).SetForeColor(clRed);
Advertencia: Esto sólo puede
hacerse si la nueva clase sólo agrega nuevas propiedades y métodos
estáticos, pero sin agregar nuevos campos ni nuevos métodos virtuales,
aunque en teoría sí se pueden redeclarar (override) métodos virtuales
existentes. Además, se puede cambiar la visibilidad de propiedades
existentes, tal como se explica en otro artículo.
|