Creación de componentes VCL (III) - Definiendo el interfaz del componente

4 - Definiendo el interfaz del componente

[editar]
Curso gratis creado por José Manuel. Extraido de: http://www.lawebdejm.com
30 de Noviembre de 1999
Ahora que ya sabemos quien va a ser el padre de nuestro componente, tenemos que decidir qué propiedades y eventos vamos a proporcionar a nuestros usuarios del componente.
A priori parecen interesantes o necesarias las siguientes:

  • CarpetaRaiz: se trata de una cadena que contendrá la carpeta a partir de la que se creará el árbol de directorios. Puede ser la carpeta raíz de una unidad de disco (p.e. “C:\”) para mostrar los directorios de todo la unidad, o bien una carpeta cualquiera, para mostrar las subcarpetas de esta. Un caso especial se dará cuando esta propiedad contenga el valor “Mi PC”, con en el que mostraremos cada una de las unidades disponibles en nuestro sistema, pudiendo expandir estas unidades para mostrar sus carpetas.
  • CarpetaActual: es un valor de tipo cadena que contiene la ruta de la carpeta seleccionada en el árbol. Si, por ejemplo, tenemos seleccionada la carpeta de primer nivel "Datos", y el nodo raíz es “C:\Temporal”, esta propiedad contendrá el valor “C:\Temporal\Datos”. También se puede modificar su valor, seleccionándose en ese caso el nodo correspondiente en el árbol (si el valor establecido es correcto).
  • MostrarPadre: es un valor booleano (true o false) que nos permite configurar la aparición o no del nodo padre. Es decir: si en la propiedad “CarpetaRaiz” hemos introducido el valor “C:\Delphi”, en el árbol aparecerá un nodo raíz llamado “Delphi”, y colgando de él, todas las demás subcarpetas. Si establecemos esta propiedad a falso, el nodo raíz desaparecerá, mostrándose todas las subcarpetas en un primer nivel, sin colgar de ningún nodo padre.

Bueno, creo que con esto puede ser suficiente para tener un componente bastante versátil.
Un primer esqueleto del componente podría ser el que vemos en el siguiente listado:

TCustomArbolDirectorios = class(TCustomTreeView) private FMostrarPadre: boolean; FCarpetaRaiz: string; procedure SetMostrarPadre(value: boolean); procedure SetCarpetaRaiz(value: string); function GetCarpetaActual: string; protected property MostrarPadre: boolean read FMostrarPadre write SetMostrarPadre; property CarpetaRaiz: string read FCarpetaRaiz write SetCarpetaRaiz; property CarpetaActual: string read GetCarpetaActual; public constructor Create(AOwner: TComponent); override; end;

Si lo estudiamos detenidamente, veremos que hemos heredado nuestra clase de TCustomTreeView (por las razones que ya hemos explicado), definiendo las propiedades que acabamos de mencionar, así como los correspondientes métodos de lectura (Get) y escritura (Set). Es estos métodos de escritura, haremos las validaciones correspondientes, como por ejemplo, verificar que la carpeta exista.
Y por último, ¿alguien se ha fijado en el nombre que le he dado a la clase del nuevo componente? ¿TCustomArbolDirectorios? ¿No dijimos que iba a llamarse TArbolDirectorios? Pues sí, pero he aplicado el mismo patrón de diseño que utiliza Borland para la VCL. En nuestra clase "Custom", definiremos toda la lógica de nuestro componente, sin publicar ninguna propiedad ni evento, y más tarde definiremos la clase definitiva (TArbolDirectorios) que simplemente publicará las propiedades que consideremos oportunas, tanto de TCustomTreeView como de TCustomArbolDirectorios. Podéis ver el esqueleto de TArbolDirectorios en el siguiente listado:

TArbolDirectorios = class(TCustomArbolDirectorios) published propiedades heredadas de TCustomTreeView property AutoExpand; property BorderStyle; property HotTrack; property Images; property ReadOnly; property RightClickSelect; eventos heredados de TCustomTreeView property OnChange; property OnChanging; property OnCollapsed; property OnCollapsing; property OnDeletion; property OnEditing; property OnEdited; property OnExpanding; property OnExpanded; property OnGetImageIndex; property OnGetSelectedIndex; propiedades heredadas de TCustomArbolDirectorios property MostrarPadre; property CarpetaRaiz; property CarpetaActual; end;
[editar]

Sé el primero en opinar


Cursos gratis relacionados con 'Creación de componentes VCL (III)'

En los últimos años, el desarrollo basado en componentes se ha convertido en una de... Más »

Autor y licencia de 'Creación de componentes VCL (III)'


Curso gratis de José Manuel. Extraido de: http://www.lawebdejm.com CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.