Delphi: Agregando nuevos métodos y propiedades sin registrar nuevos componentes

Agregando nuevos métodos y propiedades sin registrar nuevos componentes

Copyright © 2000 Ernesto De Spirito

JfControls Library - para Delphi y C++ Builder

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.

Storage Library - Guarde la configuración de su aplicación