



Los componentes visuales son aquellos que, al utilizarlos, muestran algún elemento (o dibujo) en la pantalla y es el usuario de nuestros programas el que interactúa con él. El componente es el principal responsable de dibujar en la pantalla lo que sea oportuno, dependiendo de su estado, del valor de sus atributos, etc. Hay muchos componentes de este tipo, como pueden ser los botones (TButton), etiquetas de texto (TLabel), formas (TShape), etc.
Los componentes no visuales son aquellos que no aparecen en la ventana, y se insertan en un formulario para que el programador los utilice. Son más fáciles de programar que los componentes visuales, ya que no tienen ningún tipo de interfaz gráfico. Ejemplos de componentes no visuales podrían ser un temporizador (TTimer), una tabla (TTable) o una conexión a base de datos (TConnection, TSQLConnection, etc.).
Con un primer vistazo al "Inspector de objetos" de Delphi, nos quedan claras dos cosas: un componente tiene propiedades y eventos (según las dos pestañas que vemos en la imagen de la derecha). Estos dos conceptos son nuevos y debemos dominarlos.
Las propiedades son datos públicos del componente, muy parecidas a los atributos de una clase, aunque se accede a ellas a través de dos métodos: un método para leer su valor, y otro para modificarlo. Existen propiedades de sólo lectura, en las que podemos consultar pero no modificar su valor, y propiedades de sólo escritura. Por ejemplo, las propiedades “Alto” (Width) y “Ancho” (Height) de un botón permiten que un programador pueda cambiar las dimensiones del componente. Cuando el programador cambia alguna de ellas, el componente debe redibujarse en la pantalla, para mostrar los nuevos cambios. Si miramos la pestaña “Properties” del “Inspector de Objetos”, veremos que cada una de las líneas mostradas es una propiedad del componente.
Los eventos son funciones del componente, que se ejecutarán automáticamente cuando ocurra “algo importante”. Un programador puede poner el código que quiera en el evento, para así poder hacer una acción cuando ese “algo importante” ocurra. En realidad, los eventos son punteros a funciones, aunque ya veremos esto en el próximo artículo. Del mismo modo, la pestaña “Events” del “Inspector de Objetos” nos muestra cada uno de los eventos disponibles.
Dado que un componente es una clase como cualquier otra, tenemos además métodos y atributos, aunque no los podamos ver con el “Inspector de Objetos”.
Los métodos son funciones, que permiten realizar acciones. Normalmente, se utilizan métodos para dos tareas distintas: realizar algo importante (como repintar en pantalla, cambiar el foco o algo así), o para establecer el valor de los atributos internos, haciendo algún tipo de comprobación previa. Como las propiedades pueden ser leídas o escritas a través de métodos, a veces es equivalente la llamada a un método y el cambio de una propiedad. Por ejemplo, para mostrar un botón tenemos dos posibilidades:
MiBoton.Visible := true; o bien MiBoton.Show;
Y por último, los atributos. Tienen la misma misión que en programación orientada a objetos, es decir: almacenar datos internos al objeto (o clase). En el maravilloso mundo de los componentes, los atributos siempre son internos y de uso privado, y debemos utilizar las propiedades para que un programador pueda leer o establecer un dato.
Sabiendo esto, podemos decir que la principal “misión” del programador de componentes es definir un grupo de propiedades, métodos y eventos para que otros programadores puedan utilizar el componente de forma sencilla y rápida.
|