Más sobre mensajes y eventos.

Hasta ahora prácticamente no has programado nada, pero no desesperes, porque lo poco que has aprendido hace referencia a la base de toda programación en Windows, los mensajes y sus eventos.

Te habrás dado cuenta que cuando se ejecuta el programa no ocurre nada, hasta que se genera un evento. Bien los puede generar el sistema, o el usuario. Cuando ocurre el evento nuestro programa ha de reaccionar.

Según esto hay tres grandes bloques de eventos, que básicamente todos los controles reaccionan a ellos, hay algunos que reaccionan a todos y otros a algunos, también los hay que tiene sus propios eventos aparte de estos.

 

Principales eventos ratón

 

Nombre.

Acción.

OnDlClik

Doble clic de ratón.

OnClick

Un clic de ratón.

OnMouseMove

El ratón pasa por encima del control.

OnMouseDown

Es pulsado un botón del ratón.

OnMouseUp

Es liberado el botón anteriormente pulsado

 

Principales eventos de teclado.

 

Nombre

Acción

OnKeyPress

Es pulsada una tecla y se ha liberado

OnKeyDown

Una tecla ha sido pulsada.

OnKeyUp

La tecla anteriormente pulsada ha sido liberada

 

Principales eventos del sistema.

 

Nombre

Acción

OnActivate

El formulario se activa, "toma el protagonismo"

OnClose

El formulario se cierra, "es hora de abandonar el barco".

OnCloseQuery

Se ha solicitado cerrar el formulario

OnCreate

El formulario se crea.

OnDesactive

El formulario pierde protagonismo, pero sigue existiendo.

OnDestroy

El formulario es destruido, es hora de devolverle la memoria usada a Windows.

OnPaint

En formulario necesita ser pintado, porque algo ha cambiado en él.

OnResize

Ha cambiado el tamaño del formulario.

 

Cuadros de Mensajes.

Tu primer programa no hace nada, simplemente muestra un texto un luego sale. La verdad es que es un poco mal educado, porque cuando pulsas el botón para salir, sale sin más. Quizás te hayas equivocado y deseabas seguir, o cuando lo estabas cerrando llega alguien y quieres enseñarle tu obra maestra de programación. La solución esta en preguntar al usuario si esta seguro. Los programas sin que el usuario tome parte pues no suelen ser muy agradables, y si una cosa tiene Windows es que se pasa el día mostrando mensajes al usuario.

Por si estas aun algo despistado con el concepto de cuadro de Mensajes, te comento que un cuadro de mensajes es esa ventanita que saca Windows cuando decides salir de tu procesador de textos sin guardar los cambios, por ejemplo. Te habrás fijado que no te deja otra opción que contestar, porque sino este hará caso omiso. Esa característica de los cuadros de mensajes se llama Modal, y en general es aplicable a todas las ventanas. Cuando se activa una ventana modal el programa que invocó a esa ventana se detiene en espera de que se cierre esta, y si es el caso devuelva un resultado, que normalmente es la acción del usuario.

Los tipos de cuadros de mensajes que existen son:

ShowMessage es el más sencillo de todos ellos. El cuadro aparece por defecto en el centro, el título del mismo es el nombre de la aplicación, el texto lo indicamos nosotros, y tiene solo un botón. Vamos a probarlos, en una aplicación nueva pon un boton, haz doble clic en él para que aparezca el editor de código en el evento doble clic, y dentro de él escribe esto: ShowMessage ('!Super cuadro a la vista!');

Ejecuta la apliación y si todo va bien, al pulsar el botón veras un cuadro en el centro de la apliación. Pulsa el boton y cierra la aplicación, que vamos a compliacarlo un poquito más con una variante de showMessage, que es ShowMessagePos.Esta tipo es igual al anterior pero tiene dos detalles más, que son dos valores que indican las coordenadas donde se mostrará el cuadro. Para indicar unas coordenadas dentro de la pantalla tienes que conocer el tamaño de la misma. Esto se puede obtener preguntando al sistema por el ancho y el largo de la pantalla. Hay un objeto llamado Tscreen que contiene estas propiedades, pero no te voy a liar la cabeza con cosas de programación orientada al objeto, si tienes algo de conocimiento de programación "clásica" imaginate, en este caso, que es algo así como un registro, sino tienes ni idea de esto, pues simplemente piensa que es una función o un servicio de windows, como los cuadros que estamos viendo, que los invocas y windows se ocupa de todo. Pues a lo que iba, si pones Screen.Height, obtienes el valor del alto de la pantalla, y lo mismo para Screen.Width pero para el ancho.

Así que el ShowMessagePos necesita que le indiques el texto, y además las coordenas, primero el ancho y luego el largo. Añade un nuevo botón al proyecto y en su evento dobleclic pon esta línea: ShowMessagePos ('Cuadro con Coordenadas', Screen.Width div 3,Screen.Height div 3);

Prueba el programa y veras que el cuadro sale en el centro, eso es porque las coordenadas, prueba a cambiar estos datos.

La verdad es que mostrar un mensaje y no dejar que el probre usuario pueda expresar su opinion al respecto es un poco dictador, así que para saber lo que piensa al respecto pues nada mejor que un referendum. La posibilidad se nos brinda con MessageDlg, pero por contra se complica un poco, pero no mucho. De nuevo el primer dato que recibe la función es el texto que deseamos mostrar, luego el tipo de cuadro que mostraremos segun una lista prédefinida por windows, el tercero es son los botonos que se van a mostrar, y para terminar el cuarto es indice que esta relacionado con la ayuda de la apliacción que creemos si colocamos un botón de ayuda en el cuadro.

Los tipos de cuadro que exiten estan indicados en la lista que a continuacíon muestro, ten en cuenta que según el tipo de cuadro windows pinta un icono en tu cuadro, por ejemplo un cuadro de información mostrará un icono de exclamación.

Los tipos de botones que podemos poner son los siguientes:

Cuando pones los tipos de botones que deseas debes ponerlos entre corchetes ([ ]), y seguidos de una coma. Otra opción es poner un serie de botones predefinidos, pero si lo haces no pongas los corchetes. Los tipos de botones predefinidos son:

Pon otro botón en el proyecto y escribe dentro de su evento doble clik lo siguiente:
If MessageDlg ('¿Es chuli mi apliaciación?', mtwarning,[mbyes,mbno],0) = mrYes Then ShowMessage ('¡Guai!')
else
ShowMessage ('Mal amigo');

Observa que aqui hay más novedades, y es que MessageDlg deuvelve el valor del botón pulsado por el usuario. El valor devuelto es una constante que puede tomar los siguientes valores:

Observa que el valor de la constante tiene el nombre del botón pulsado, así en el ejemplo cuando es pulsado el botón mbYes, el valor devuelto es mrYes. Ten cuidado no vallas a esperar la pulsación de un botón que nos has puesto en el cuadro, porque nunca te devolverá ese valor la función. Un inciso para los lectores con menos conocimientos, y es una breve explicación de la instrucción If.
La instrucción if comprueba condiciones, así en el ejemplo estoy evaluando el valor que existe a la derecha del if, con el de la izquierda. Si la condición es igual ejecuta la linea que ahi inmediatamente debajo, en otro caso (else) ejecuta la linea que hay despues del else.Tambien se puede omitir el else, pero no tendriamos una segunda alternativa. Para más información mira la ayuda de delphi, o un libro de metodología de la programación si es que no tienes conocimientos previos de programación.

La variante de MessageDlg es MessageDlgPos, que es igual pero tiene un par de datos más, que es, al igual que ShowMessagePos, las coordenadas donde se situará el cuadro cuando se muestre. Su formato es:
MessageDlgPos ('texto',tipo de cuadro,botones,indice de ayuda, coordenada X, coordenada Y);

Te habrás dado cuenta que todos estos cuadros estan en inglés, pero tenemos la opción de ponerlos en castellano, y es usando MessageBox, pon esta linea en otro boton:
Application.MessageBox ('Mensaje','Titulo',mb_okCancel+mb_IconExclamation);
Fijate de nuevo el mensaje a mostrar, luego el titulo, despues los botones que queremos poner, y el icono también a nuestra voluntad. No voy a entrar en detalles sobre este tipo de cuadro, ya que este individuo es una llamada a la api de windows, ese es el motivo porque saque los textos de los botones en castellanos, si lo pruebas sin cambiar nada en un ordenador con un windows en otro idioma, los botones saldran en ese otro idioma.

Fiajate que si deseas comprobar el tipo de boton que devuelve la función debes usar estas constantes, no las anteriores:

Los botones que puedes utilizar son solo las combinaciones de botones predefinidas que listé más arriba. Y los tipos de iconos son:

En esta página has aprendido los cuadros de mensajes predefinidos, la próxima página explica como hacer un cuadro de dialogo propio, que funciona igual que estos, pero le puedes poner lo que quieras. Ahora si quieres puedes bajar los ficheros de un programa que realiza todo lo que he explicado aqui. Te invito a que experimentes todas las variaciones que se te ocurran sobre los ejemplos que he puesto.


17 de Noviembre de 1997