Lo primero que tenemos que decidir es de qué componente debemos heredar para tener la mayor parte del trabajo hecho. A priori, puede parecer sencillo ¿no? "Pues para tener un árbol tenemos que heredar de la clase
TTreeView" diría cualquiera. Pues sí, pero no. La VCL esconde algunos secretos que tenemos que conocer si vamos a crear nuestros propios componentes heredados.

Antes hemos dicho que la VCL utiliza continuamente la herencia para sus propios componentes, es decir: que el componente
TTreeView también tiene padre, abuelo, bisabuelo y una larga lista de ancestros, que han definido sus características, modo de actuación, apariencia, etc. Para que os hagáis una idea de la complejidad, podemos ver todos los antecesores de la clase
TTreeView en la imagen de la derecha.
De todo este árbol genealógico, sólo vamos a fijarnos a partir TComponent:
-
TComponent: este nos resulta familiar, ya que es la clase a partir de la que hemos creamos nuestro conversor de monedas de los anteriores números. Los componentes no-visuales deben heredar directamente de TComponent, ya que este proporciona las características básicas.
-
TControl: se trata de la clase padre para todos los componentes visuales, ya sean gráficos o no.
-
TWinControl: de esta clase descenderán todos los componentes dibujados directamente por Windows. La principal característica de estos objetos (llamados ventanas o Windows) es que están identificados por un número único llamado descriptor o manejador de ventana (en inglés handle).
-
TCustomTreeView: se trata de la clase que permite mostrar un árbol dentro de un formulario de Delphi. La peculiaridad es que esta clase no tienen ningún método ni propiedad en la sección published, por lo que no puede ser manejada desde el entorno de Delphi.
-
TTreeView: esta ya es la clase o componente final, que aparece registrado en la paleta de componentes, y que puede ser configurado en tiempo de diseño. En realidad, todo el trabajo de esta clase se limita a publicar las propiedades y eventos que han sido programados en la clase TCustomTreeView.
Como veis, lo que parecía obvio no lo es tanto. Casi todos los componentes de la VCL que aparecen en la paleta son clases casi vacías, que sólo publican ciertas propiedades y eventos de la clase padre (que suele anteponer el prefijo Custom a su nombre). Es en esa clase “Custom” donde se codifica todo lo necesario para que el componente funcione. La gente de Borland diseñó de esta forma los componentes para permitir crear componentes especializados, como nuestro TArbolDirectorios, pero que no muestren todas las propiedades y eventos, sino sólo los que sean propios del componente que estamos creando. En nuestro caso, no publicaremos todas las propiedades, ya que consideramos que algunas no son apropiadas para un árbol de directorios.