<-- Capítulo

Índice del tutor de Delphi
© Copyright 1998,99
por David Martínez.

Todos los derechos reservados

Capítulo -->

Capítulo 7. Componentes y Paquetes

Hay muchos objetos en la barra de componentes de Delphi. Todos estos objetos están escritos en Object Pascal, y en conjunto forman la librería VCL.

Un componente es un objeto que "sabe" como comportarse en modo de diseño, y puede ser añadido a una forma. Todos los objetos de la barra de componentes de Delphi heredan directa o indirectamente de TComponent, que es de donde heredan su comportamiento en tiempo de diseño, y sus capacidades de añadirse a y grabar su estado en el archivo de Forma (dfm).

Como Delphi es completamente orientado a objetos, usted puede heredar un objeto que se comporta exactamente como el objeto del cual heredó. Este concepto es lo que hace tan sencillo el extender la barra de herramientas de Delphi para nuestros requerimientos.

El Punto de Vista del Autor de Componentes

La programación de componentes es muy distinta a la programación de aplicaciones. Cuando usted programa aplicaciones, usted sólo se debe de preocupar por la manera en que su objeto se debe de comportar durante la aplicación. Pero cuando usted programa un componente, usted debe de tomar en cuenta la manera en que su componente se comportará en tiempo de diseño también.

Delphi no es tramposo, y utiliza una versión compilada de su componente para mostrar el componente en tiempo de diseño. Esto quiere decir que cada vez que usted añada una propiedad publica al componente, debe usted asegurarse de que esta propiedad también funcione en tiempo de diseño, o que al menos su componente pueda distinguir si está en tiempo de diseño para que el desarrollador que está añadiendo el componente no obtenga errores extraños al tratar de usar su creación.

Como Delphi está corriendo su código cuando usted crea un componente, usted puede añadir menús, editores especiales y muchas cosas más como ayudas de diseño para el usuario (que en este caso es el desarrollador que tiene Delphi y está creando un programa haciendo su componente.

Paquetes

La tecnología de paquetes es parte integral de la habilidad que tiene Delphi para extender sus capacidades usando componentes y ayudas de desarrollo. Usted también puede utilizar la misma tecnología para extender sus propios programas.

Todos los componentes viven en un paquete. Un paquete es una clase de DLL especial que tiene funciones para pasar tipos de datos especiales (los DLLs, en su forma nativa, sólo pueden pasar cadenas de texto, números y punteros). Los paquetes de Delphi son integrales para el diseño de componentes, porque cuando un componente está en modo de diseño Delphi utiliza la librería de paquetes para cargarlo en memoria.

Usted puede Activar y Desactivar paquetes con el menú de "Project-Install Packages" en Delphi. Además, cuando usted abre un proyecto, el proyecto recuerda los paquetes que usted estaba utilizando y los activa, para asegurarse de que todos los componentes estén funcionando cuando usted despliegue la forma.

Usted puede crear sus propios paquetes en Delphi. Un archivo fuente de cabecera de un paquete tiene la extension .dpk. Un paquete compilado tiene la extension .dpl.

La extensión .DPL de los paquetes es únicamente para que Delphi los diferencíe de un DLL. Si usted cambia la extensión a DLL podrá abrirlo con quick view o cualquier programa de desarrollo que pueda mostrar las funciones exportadas de un DLL (aquí nomás curioseando). Cambie la extensión de nuevo a .DPL para utilizarlo en Delphi.

Tipos de Componentes

Por sí solo, un TComponent no puede hacer nada más que exportar las propiedades de su sección "published" en formato DFM, y mostrar una cajita en la forma que no se muestra en modo de ejecución (esto es, un componente no visual). Así que rara vez querrá usted crear un componente "desde cero". Lo que usted probablemente hará es extender un componente existente, o al menos utilizar algunos de los descendientes abstractos directos de TComponent para crear su propio componente.

Para escribir componentes, dos cosas le serán de extrema utilidad:

Es por esto que todas las versiones de Delphi en vez de la estándar vienen con el código fuente de la librería de componentes. A veces, cuando heredamos componentes, es importante asomarnos a ver cómo los programadores de Borland escribieron métodos específicos, para saber si podemos reutilizar este código o si necesitamos hacer override al código existente (o en la mayoría de los casos, alguna combinación de ambos).

Reglas para Crear un Componente

Un componente es muy, muy parecido a una clase, pero escribir un componente debe tomar en cuenta las siguientes reglas:

Regla #1. Las propiedades para el Inspector de Objetos van en la sección published

Cuando usted crea un componente y desea que su propiedad sea parte del inspector de objetos, usted deberá declararlas en la sección published de su componente. Las propiedades de la sección published son mostradas en el inspector de objetos y son grabadas en el archivo DFM.

Regla #2. Crear métodos para cambiar propiedades

Para crear un componente, es obligatorio hacer métodos GetXXX y SetXXX para cambiar un miembro.

Por ejemplo, considere el código siguiente:


  private
    procedure SetVariable( Value : String );
    function GetVariable: String;
  protected
    FVariable : String;
  published
    property Variable : String read GetVariable write SetVariable;

Esta es la manera correcta de cambiar una propiedad en un componente. Su variable FVariable está "protegida", esto es, sólo la clase y sus descendientes pueden accesarla. La propiedad Variable es de tipo String y se puede leer y modificar con los métodos GetVariable y SetVariable, respectivamente. La versión protegida de su variable puede tener cualquier nombre, pero el estilo típico en Delphi es añadir una letra "F" antes de la variable.

Esto se hace así para permitirle a usted hacer tareas automáticas, como inabilitar el control cuando la variable tiene un valor específico, o cambiar el color de un control automáticamente cuando el valor de una propiedad cambia. En este ejemplo, el color del control cambia a verde cuando la propiedad Variable tiene la cadena "Hola Chavos".

Regla #3. Su componente debe estar registrado

Para que se muestre en la paleta de objetos, su componente debe haber sido registrado con anterioridad. Cuando usamos el Wizard de creación de componente, Delphi registra el componente automáticamente añadiendo el siguiente procedimiento a su código:


procedure Register;
begin
  RegisterComponents('Samples', [TSuComponente]);
end;

El crear un componente es una disciplina con preceptos muy sencillos, pero es un arte. Usted puede hacer desde cambios pequeños como el hacer un TLabel que imprima "al revés", hasta la creación del widget para realidad virtual más picudo del planeta.

Capítulo -->