Cómo acceder a propiedades protegidas de objetos

Accediendo a propiedades ocultas

Copyright © 2000 Ernesto De Spirito

SMImport - Componentes VCL nativos para importar datos

Haciendo públicas propiedades protegidas

Algunos componentes tienen propiedades útiles, pero por alguna razón han sido declaradas en su sección protected, de modo que no son directamente accesibles por el programador.

Por ejemplo, TStringGrid, TDrawGrid, TDBGrid y en general todos los descendientes de TCustomGrid tienen una propiedad InplaceEditor que representa el cuadro de texto usado para editar los valores de las celdas. Sin embargo, no puede accederse a esta propiedad directamente puesto que ha sido declara como protected.

La solución más fácil a este problema es subclasar (derivar) este componente con el único propósito de publicar la propiedad protegida. Por ejemplo:

type
TDBGridX = class(TDBGrid)
public
  property InplaceEditor;
end;

Castando a la nueva clase

Como explicamos en otro artículo, no es necesario instalar este nuevo componente, registrarlo en la paleta de componentes ni sustituir los componentes de nuestras aplicaciones (lo que sería demasiada molestia para una cosa tan pequeña). En su lugar, cada vez que queramos acceder a esta propiedad, podemos simplemente castar (convertir) el objeto (por ejemplo DBGrid1) a nuestra nueva clase. Por ejemplo:

TDBGridX(DBGrid1).InplaceEditor.SelectAll;

Nota: InplaceEditor será nil hasta la primera vez que EditorMode se establezca en True (ya sea por código o cuando el usuario presione F2).

JfControls Library - para Delphi y C++ Builder