Aprenda a interactuar con el usuario de una aplicación a través de los eventos que envían mensajes a la ventana o los controles implicados.

En el artículo anterior de nuestro curso (véase PC World 114, Octubre 1995), habíamos visto cómo definir propiedades en el inspector de objetos. Lo aplicábamos al caso de los formularios, pero el método es similar cuando se trata de los diversos componentes (típicamente controles estándar Windows, u otros componentes de la paleta de Delphi) que hayamos insertado en él.

En la misma ventana del inspector de objetos (Object Inspector) hay una segunda ficha etiquetada Events. Al hacer clic sobre su pestaña, se nos mostrarán los diversos tipos de eventos ante los cuales una determinada ventana o un componente de nuestra aplicación (puede ser el formulario, un control estándar Windows, o un componente cualquiera, imaginemos un control VBX), es capaz de responder con acciones definidas por el usuario.

Ficha Events

Para saber qué procedimientos de respuesta a eventos están predefinidos, seleccione en la ventana de diseño del formulario el componente deseado (haciendo clic sobre él), o si desea que así sea, todo el formulario (haciendo clic sobre un área libre). Ahora, en el inspector de objetos deberá hacer visible la ficha Events, haciendo clic sobre su pestaña.

Observe que el formulario y cada uno de los componentes que pudiera tener, poseen unos procedimientos de respuesta a eventos particulares. Algunos son comunes a todos los componentes visuales (los que se muestran visibles en la aplicación final); tal es el caso del denominado OnClick, que se refiere a hacer clic sobre él. Para saber más acerca de qué objetivo tienen, puede hacer clic sobre el área de edición que hay a su derecha y pulsar la tecla F1, con lo que se desplegará la ayuda contextual correspondiente.

Supongamos que diseña una aplicación (abriendo un nuevo proyecto), en el que hay el formulario y un botón de comando, que habrá insertado seleccionándolo en la paleta de componentes estándar y haciendo clic sobre el lugar del formulario en que desea se sitúe. Puede etiquetarlo Salir, escribiendo ese texto en su propiedad Caption.

Para dotarlo de funcionalidad, bastará ir a la ficha Events y hacer doble clic en el área de edición a la derecha de OnClick. Sucederán dos cosas: se fija un nombre para la función de respuesta, por ejemplo Button1Click, y se abrirá la ventana de edición de código, situando el cursor en el lugar en que deberemos escribir nuestro código de respuesta al evento de hacer clic sobre ese botón de comando; algo así como:

procedure TForm1.Button1Click(Sender: TObject);

begin

{ <-- aquí estará el cursor }

end;

Si lo que desea es que se cierre la ventana del formulario y, dado que es la ventana principal, se salga de la aplicación, no tendría más que poner:

procedure TForm1.Button1Click(Sender: TObject);

begin

Close; { o bien: Form1.Close; }

end;

Ahora ejecute su aplicación, haciendo clic sobre el botón denominado Run, que tiene la forma de un triángulo verde apuntando a la derecha, o seleccionando la opción de menú Run\Run. Cuando aparezca la ventana del formulario, haga clic sobre el botón Salir y se cerrará la aplicación. Ya habrá creado su primera función de respuesta a eventos y así deberá operar en todos los casos.

Respecto al nombre que le ha dado Delphi inicialmente, podrá cambiarlo a su antojo, sin más que escribir otro nuevo en el área de edición que hay a la derecha del evento OnClick en el Inspector de objetos. Todo el código asociado se actualizará en consecuencia de forma automática.

Métodos de los componentes

Una función de respuesta a eventos se codifica con lenguaje Object Pascal y con otras funciones o procedimientos que sean propios (y precodificados en su diseño) del componente con el que estemos tratando, u otros componentes sobre los que queramos influir. Esas funciones o procedimientos propios de un componente y que se definen cuando se han diseñado (algo que no atañe al programador que los está utilizando), se denominan métodos.

En el breve ejemplo anterior, nos encontramos con el método Close, que se refiere al formulario en sí y sirve para cerrar su ventana. Pero, ¿cómo saber que métodos hay disponibles en cada componente o en la ventana del formulario? Es algo que no aparece en ninguna ventana de diseño de Delphi, pero que sí se recogen en la ayuda contextual. Por ejemplo, para conocer los métodos disponibles para el componente Button, selecciona su icono en la paleta de componentes y pulsa la tecla F1. Igualmente, puedes seleccionar un componente de ese tipo en la ventana de diseño del formulario (si hay uno de ese tipo) y pulsar F1.

Una vez en la ventana de ayuda de TButton (o del componente seleccionado), haga clic sobre la definición emergente Methods y se le mostrarán todos los métodos que hay implementados para él. Escoja el deseado para ver de qué se trata y cual es su modo de uso. Algunos de dichos métodos son funciones, lo que significa que devolverán un valor (por ejemplo FindComponent); otros son procedimientos, que ya sabemos son tipos de funciones que no devuelven valor (por ejemplo, Hide y Show).

Entrada/salida estándar por pantalla

Delphi dispone de una serie de funciones que nos permiten exponer en pantalla mensajes y/o requerir entradas de usuario. Se trata de una especie de formularios (usando la terminología Delphi) de entrada/salida estándar. Cuatro son los que por el momento nos interesa conocer, dada su aplicación general:

- ShowMessage: Es el modo más simple de dar avisos, se pasa como parámetro el texto del mensaje del tipo String. Sólo contendrá un botón de aceptar.

- MessageDlg: Muestra un diálogo centrado en la ventana de la aplicación; se le pasa como parámetros una variable String con el mensaje, un parámetro tipo AType que define el icono que lo acompaña, otro con el conjunto de botones y, optativamente, un número con un índice a una ayuda contextual. A la vuelta retorno el identificador del botón pulsado. Para más detalles acerca de los valores, véase la ayuda contextual de Delphi.

- MessageBox: Puede ser la función MessageBox del API de Windows, o un método de Delphi, similar a la función del mismo nombre del API de Windows. En el caso del método toma como parámetros el texto del mensaje y el título de la caja de mensajes, ambos del tipo PChar, y unos Flags que definen el icono y los botones de comando. Devuelve un valor propio del botón pulsado. Para más detalles acerca de los valores, véase la ayuda contextual de Delphi. Se debe llamar con Application.MessageBox(...). Por su parte, si queremos utilizar la función del API de Windows, hemos de pasar como primer parámetro el manejador de la ventana padre (tipo HWnd), el resto es igual. En este caso, se llamaría con MessageBox(....). Lo más habitual es que empleemos Handle, ya que nos referiremos a la ventana actual.

- InputBox: Es el método más simple de requerir entrada de usuario. El método toma como parámetros tres cadenas tipo String que se refieren a: título de la caja, lo que se pregunta o pide y un texto que se expone como propuesta inicial en el área de edición. Consta de los botones de aceptar y cancelar. A la salida devuelve la cadena tipo String que contiene el texto del área de edición.

- InputQuery: Muy semejante al método anterior, el tercer parámetro (el de la cadena propuesta) es una variable, en la que se guardará a la salida el texto que haya en el área de edición. Devuelve un valor Booleano de cierto/falso, según se pulse el botón de aceptar o cancelar.

En el listado de la figura 1 se recogen ejemplos del uso de todos estos tipos de ventanas de entradas/salidas estándar. Dado que se utilizan cadenas tipo String y PChar, también inclui