| Artículos | 01 ABR 1999

CorelDRAW 9

Tags: Histórico
Nueva versión del emblemático programa de dibujo vectorial
Jorge Pascual.
En la búsqueda de soluciones por parte de las empresas de desarrollo, que les permitan a sus equipos de programación ahorrar tiempo y esfuerzos, siempre se llega a la misma conclusión: no hay que reinventar la rueda, lo que en términos informáticos se traduce en la reutilización de código ya escrito, bien propio o diseñado por terceras personas.
La pretensión de un componente siempre va a ser el dar una solución a un usuario, gracias a un intermediario (el programador) que integra dicho componente en la solución informática. Su objetivo más inmediato es acortar los ciclos de desarrollo mediante el ahorro de tiempo y esfuerzo por parte del programador, que antes de utilizar el componente debía enfrentarse a un desarrollo partiendo de cero.
Otro objetivo de gran importancia podría ser la estandarización, de forma que las aplicaciones adquieran atributos comunes, ya sean de apariencia, manejo, manipulación de datos, etc. En general, se trata de resolver de la misma manera idénticos problemas. Asimismo, las aplicaciones podrán adaptarse con mayor flexibilidad a los cambios, ya sean éstos debidos a una evolución en la solución informática ambicionada (léase requerimientos del cliente) como a la intrínseca y rauda evolución de las técnicas informáticas. Con la utilización de componentes, también se mejora en general el mantenimiento de las aplicaciones, no sólo por su flexible adaptación, sino también porque estamos añadiendo un código donde ya se ha probado con anterioridad su eficacia y robustez.

Delphi
Los componentes de Delphi están ligados a una jerarquía de clases llamada VCL (Visual Component Library). Es necesario comprender que los componentes son clases, con lo que, cuando se crea un componente, lo que hacemos es añadirlo al VCL derivando otra clase ya existente.
Para diseñar un componente, lo primero es decidir sus características básicas o, lo que es lo mismo, localizar algún otro objeto o componente del cual heredar sus propiedades. Si no existe en el VCL nada parecido, hay que recurrir a las primeras clases, como puede ser TObject (veremos más tarde que, para los componentes existe una clase en particular llamada TComponent).
La desventaja de una herencia directa de TObject reside en que se trata de un componente absolutamente abstracto que no nos va a proporcionar ninguna parte (propiedad, método o evento) aprovechable. Por el contrario, si existe algún componente que nos pueda servir de base, aunque su funcionalidad sea más limitada, nos ahorrará mucho tiempo y esfuerzo.
La definición de un componente es similar a la generación de una aplicación, sin embargo, tiene la particularidad de que tenemos acceso a ciertas partes que habitualmente no están disponibles. Asimismo, tenemos que ser más cuidadosos que de costumbre, primero por tener acceso a estas partes más críticas o delicadas, segundo, porque los errores en los componentes se multiplican en todos los módulos y en todas las aplicaciones que los usen.

Modos de crear componentes
Como hemos visto, el modo más común es localizar un componente que nos pueda servir de base y añadirle aquellas partes que sean oportunas.
Por ejemplo, Delphi proporciona un componente denominado TDateTimePicker que permite desplegar una caja con calendario incluido con el fin de que el usuario pueda elegir una fecha (encapsula un elemento relativo a un servicio del API de Win32). Pues bien, sería de gran utilidad crear un componente con enlace a base de datos, de forma que dicha elección de fecha pudiera asociarse a un campo determinado. Diversos autores han creado diferentes versiones de un componente de estas características, derivado del componente original. Como ejemplo, proporcionamos una versión simplificada del mismo, bajo el nombre de TDbDateEdit. En la web de PC World, www.idg.es/pcworld. podrá encontrar el código fuente completo.
Sin embargo, en ocasiones interesa crear los nuevos componentes, ya que sus características son muy particulares. Existen cinco modos clásicos de crear componentes. El más común es el de modificar controles ya existentes, que consiste en caracterizar a medida un control que ya existe. En muchos componentes, como las cajas de lista o rejillas, existe un componente adicional (con la palabra custom), a modo de clase abstracta, que permite crear directamente nuestra variación. Ejemplos de componentes son TCustomGrid o TCustomListBox.
El segundo sistema es crear un control original, que sería algo así como caracterizar un control de Windows. Recordemos que en Windows, como su nombre indica, todo son ventanas a ojos del programador (botones, cajas, etc...). Para crear un nuevo control, debemos derivarlo de la clase TWinControl, con la ayuda de TCustomControl. El sistema asignará un handle a nuestro control como si de una ventana se tratase, pudiendo adquirir el foco y ser receptor de mensajes relativos a la entrada de datos (teclado, ratón, etc...). Se requiere un buen conocimiento del API de Windows para crear este tipo de controles.
El tercer sistema es el de crear un control gráfico, muy parecido al anterior, pero más sencillo. En el supuesto de que nuestro control no necesite foco de entrada, no es necesario generar el manipulador de ventana con el consiguiente ahorro de recursos, velocidad, etc... En realidad, la función más importante que realiza un control de este tipo es dibujar algo en el lienzo o canvas en función de los parámetros asociados. Un ejemplo característico es el componente TLabel, que muestra una etiqueta en un formulario. Aunque no es posible recibir datos del teclado, sí es posible recibir mensajes del ratón (a excepción de los relacionados con el foco) para detectar eventos de pulsación y movimiento. Para llevar a buen término el desarrollo de estos componentes, Delphi proporciona las clases correspondientes de TGraphicControl, derivada de TControl.
El cuarto sistema es el de subclasificar controles de ventana, que se parece en gran medida a lo que hacen los programadores de C cuando trabajan con el API de Windows. Se trata de definir una clase de ventana nueva y registrarla en el sistema. Habitualmente, toda la gestión del componente se contiene en una librería DLL que debe estar accesible, quedando para el programador solamente el trabajo de generar una interfaz adecuada. Muchos de los componentes que aporta Delphi se han realizado de esta manera (como, por ejemplo, TEdit o TDateTimePicker) al ser el sistema quien aporta toda la gestión del control, mientras que en las unidades de Delphi tan sólo figura la interfaz que convierte el control en algo asequible y compatible con el entorno de desarrollo.
Sin embargo, hay que hacer una pequeña aclaración, y es que el subclasificar controles de ventana se utiliza para crear nuevos componentes. Una vez creados, sea por nosotros mismos o porque el entorno de desarrollo ya los trae, son componentes normales y corrientes que pueden ser derivados tal y como vimos en el primer sistema. Es decir, a partir de TEdit o TDateTimePicker se pueden crear nuevos controles sin preocuparnos del sistema que se ha utilizado para crear sus ancestros. Lo mismo podemos decir de los otros sistemas de creación de componentes.
Finalmente, el último sistema es el de crear componentes no visuales. Este es el caso de los componentes del sistema y de las bases de datos. Como no hay reglas preestablecidas, lo lógico es derivar el componente de TComponent, que es la clase

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información