33 Responder a Eventos Que aprenderá en el capítulo 3: • La diferencia entre programación orientada a eventos y la programación tradicional. • Como escribir código pulsando un botón. • Como añadir comentarios en el código. • Como seleccionar controles en la caja de control del editor. • Como seleccionar eventos en la caja de eventos del editor. • La estructura del programa Visual RPG. • Propiedades de los campos de entrada/salida y enlazar los datos de entrada. Tiempo aproximado para finalizar este capítulo 3: 45 minutos. Aspecto que tendrá la aplicación al finalizar este capítulo 3: 34 ASNA Visual RPG para Principiantes Una de las principales ventajas del Interface de Usuario GráficoError! Bookmark not defined. es la posibilidad de crear aplicaciones que respondan a las acciones de los usuarios. Estro permite la usuario la ejecución directa de la aplicación, en lugar de tener que predefinir paso a paso la integración en el programa. Orientación a Eventos vs. Programación Tradicional En la programación tradicional, la ejecución de un programa depende sólo de las entradas que hay, comenzando en la primera línea del programa y siguiendo las líneas del programa, llamando a subrutinas cuando se necesita La programación orientada a eventos amplia el modelo de rendir cuentas en función de las acciones que el usuario toma programa, y para manejar la comunicación entre el mismo sistema. Estas acciones se llaman los eventos, y cuando provocan la ejecución de la subrutina del evento. ejecución para con respecto al programa y el estos ocurren, En AVR, el código ejecutado responde a un evento. Cada formulario y control tienen predefinido un conjunto de eventos de sistema y usuario. Si uno de estos eventos ocurren, AVR invoca al código en la subrutina asociada al evento. Una subrutina de evento es el código que usted escribe para responder al evento. Que pasa en una aplicación orientada a eventos: 1. El proyecto se inicia y automáticamente se carga la pantalla del formulario principal. 2. Un formulario o control recibe un evento. El evento puede producirse por el usuario, el sistema, o indirectamente por tu código. 3. Si se produce un evento que corresponde a una subrutina, esta se ejecuta. 4. La aplicación espera al próximo evento. Ejemplos de eventos asociados al formulario: • El ratón se mueve por el formulario. (MouseMove) • Se pulsa el botón del ratón en el formulario. (Click) • El formulario se descarga desde la pantalla. (Unload) Ejemplos de eventos asociados a campos de entrada/salida: • Se pulsa una tecla. (KeyPress) • El campo de e/s tiene el foco. (GotFocus) • Se pulsa un doble-click en el campo. (DoubleClick) Capítulo 3 Responder a Eventos 35 AVR Estructura del Programa En AVR, como en el tradicional RPG, un programa está predefinido de la siguiente manera: Especificaciones de Archivos: F-Hoja - Archivo Externo K(F)-Hoja - Línea de Continuación para hoja F Especificaciones de Campos: S(I)-Hoja - Estructura de Datos B(I)-Hoja - Estructura de campo N-Hoja - Constante de Nombre E-Hoja - Extensión para definición de Tabla Hojas de Cálculo: C-Hoja - Cálculo Las hojas en blanco pueden estar en cualquier línea del programa. Las hojas en blanco se usan para comentarios y para escribir los comandos en formato libre. Note que las hojas I y O no están soportadas. Todos los archivos, incluyendo los de impresora, han de ser definidos externamente,como verás en el capítulo 4. Dentro de las hojas C, cualquier código que precede la subrutina de un programa se considera hoja C. El código de estas líneas es ejecutado la primera vez que el formulario se carga en la memoria y antes de las líneas del programa que esperan un evento. Normalmente en las hojas C, los archivos ya están abiertos, por lo que en tiempo de ejecución sólo se inicializan las propiedades y se codifican las operaciones. Las subrutinas están a continuación de las hojas C principales. Las subrutinas se clasifican en dos tipos: Subrutinas de Eventos y Subrutinas de Procesos. • Subrutinas de Eventos son las que son llamadas en tiempo de ejecución en respuesta a un evento causado por el usuario, el sistema, o indirectamente por el programa. Se puede ejecutar directamente una subrutina de eventos, para ello debes utilizar el código de operación EXSR , con el nombre del control en el factor 2 y el nombre del evento en el factor 1. • Subrutinas de Procesos son las subrutinas utilizadas tradicionalmente en la programación con RPG. 36 ASNA Visual RPG para Principiantes Subrutinas de Eventos en el Editor El Editor contiene en la Barra de la Cabecera dos caja de lista: La Caja de Control situada a la izquierda de la ventana, y la Caja de Eventos situada a la derecha de la ventana. La Caja de Control muestra el formulario actual y todos los controles del formulario. Pulsa sobre la flecha de la derecha de la Caja de Lista para mostrar una lista de todos los controles asociados al formulario. La Caja de Procedimiento de Eventos enumera los procedimientos de eventos para el control seleccionado. Pulsa sobre la flecha de la derecha de la caja de la lista para ver todos los eventos disponibles para el control seleccionado. Si usted selecciona un evento desde la Caja, AVR agregará una subrutina de evento en su código. Si una subrutina de evento ya existe en su programa para ese control y evento, entonces el editor ubicará el cursor sobre esa subrutina. La subrutina de evento generada por AVR contiene los nombres del control y de evento en una línea de BEGSR y su correspondiente línea ENDSR. La sintaxis para BEGSR en AVR se ha ampliado para aceptar el Factor 2 optativo. AVR determina si una subrutina de evento existe para un evento particular, si hay una subrutina en el programa en el factor 1 pone el control y en el factor 2 el evento. Capítulo 3 Responder a Eventos 37 Botones de Mandato Ahora vamos a programar un botón de mandato que nos permita calcular el cambio que debemos dar al cliente, basándonos en el importe que nos ha dado y restando el importe total de la compra. Vamos a añadir un botón de mandato Botón Mandato de 1. Seleccione el Command Button de la paleta de control y sitúalo en el formulario. 2. En la propiedad Caption ponga Pay, btnPay en Name y en Default True. El formulario tendrá el siguiente aspecto: 3. Abra el Editor e introduzca la siguiente subrutina: 38 ASNA Visual RPG para Principiantes El programa quedará así: 4. Ejecuta el programa. 5. Después de introducir valores nuevos en los campos de E/S, pulsa el nuevo botón de Pay (Pagar) . AVR capturará la subrutina correspondiente y calculará el nuevo valor para el campo ioChange (Cambio). El Evento Click Como has visto pulsando el botón del ratón es una manera de ejecutar el botón de mandato. Otra manera es situando el foco en la tecla de mandato y pulsar la tecla Intro o la barra espaciadora. • Si el botón de mandato tiene la propiedad Default a True, al pulsar intro en cualquier lugar del formulario se ejecutará el evento. • Si el botón de mandato tiene la propiedad Cancel a True, al pulsar la tecla EscError! Bookmark not defined.Error! Bookmark not defined. en cualquier lugar del formulario se ejecutará el evento del botón. Finalmente, hay una forma más de seleccionar los botones de tu programa. Windows trata el carácter ampersand (&) como una opción cuando este se encuentra en la propiedad Caption . Cuando Windows detecta un ampersand, subraya el carácter siguiente al & en el título. Cuando el carácter subrayado se pulsa junto con la tecla Alt, genera un evento para el Botón de Mandato. Capítulo 3 Responder a Eventos 39 ✔ Cambia el caption de btnPay a '&Pay'. Verás que la P tiene un subrayado. ✔ Ejecuta el programa y prueba las diferentes maneras de generar clicks para el botón Pay. Vamos a añadir otro Botón de Mandato 1. Botón de Mandato Añade otro Command Button para permitir salir del programa de una manera controlada. 2. En el Name del botón introduce btnDone, en Caption pon &Done y en la propiedad Cancel pon True, por lo tanto al pulsar la tecla Esc se ejecutará el evento. 3. Añade la siguiente subrutina para el botón btnDone. Volver de una subrutina con el indicador LR encendido provocará que se finalice el programa. Añadir Comentarios Puedes añadir comentarios en tu programa Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.AVR usando la especificación de la hoja Blanca, que es una línea con la primera columna en blanco. Los Comentarios en AVR empiezan con /* y terminan con */. También puedes empezar con //, en este caso se entiende que el comentario llega hasta el final de la línea. En el siguiente código verás algunos ejemplos de comentarios. Verás que también puedes dejar líneas en blanco. 40 ASNA Visual RPG para Principiantes Editar datos de IOFields La mayoría de las propiedades de IOField pueden manejarse con las propiedades, introduciendo el valor para campos de salida. También se pueden manejar cuando el usuario cambia el valor de un campo de entrada. Lista de Propiedades a tener en cuenta: Para controles con valores numéricos: NumericLengthError! Bookmark not defined.Error! Bookmark not defined. Define el número de dígitos de una variableError! Bookmark not defined.Error! Bookmark not defined.. Cuando este valor es mayor que 0 y se utiliza con las propiedades Decimals y EditCode, sólo se podrán entrar valores numéricos, que no excedan el valor de esta propiedad. Decimals Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Define el numero de dígitos que tendrá un campo a la derecha del punto decimal, de un campo con NumericLength. Cuando las propiedades NumericLength y EditCode tienen valores mayor que 0, el usuario sólo podrá entrar el numero de decimales que no excedan el valor de esta propiedad. EditCode Permite que puedas puntuar campos numéricos, incluyendo Error! Bookmark not defined.Error! Capítulo 3 Responder a Eventos 41 Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.signo de &, comas, tiempos, signo menos. La propiedad EditCode se puede utilizar en campos de salida y para editar campos de entrada junto con las propiedades NumericLength y Decimals. EditWord Permite utilizar literales, como blancos, símbolos y caracteres para editar datos numéricos. Para Controles con Valores Carácter: MaxLength La longitud máxima se utiliza para limitar el número de caracteres que un usuario puede introducir en un campo de entrada.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. La propiedad MaxLength predomina sobre cualquier otra propiedad relativa al número de caracteres que pueden ser introducidos o visualizado en un campo de E/S. Sin embargo si un EditCode o EditWord tienen más caracteres que MaxLength, o NumericLength es mayor que MaxLength, se visualizará la MaxLength y será truncada por la derecha. PasswordChar Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Determina si el texto que introducirá el usuario en un campo de E/S, al introducirse será sustituido por un carácter, que por omisión se asterisco (*). UpperCaseOnly Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Fuerza que todos los campos de entrada sean mayúsculas. Para cualquier tipo de campo: defined.Error! Bookmark not defined. Alignment Error! Bookmark not Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Controla si el texto parecerá en la izquierda, derecha, o centro del área de visualización del control. Si la propiedad MultiLine es False, la propiedad Alignment es ignorada para los valores de las propiedades EditWord 42 ASNA Visual RPG para Principiantes o EditCode. MultiLine Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Determina si un campo de E/S puede aceptar visualizar múltiples líneas de texto. FieldAdvance PermiteError! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. las teclas “+”, “-“, e “Intro” en campos numéricos y actúa como la tecla Tab, salta al siguiente campo de la secuencia del tabulador. La secuencia del Tabulador indica donde debe ir el foco cuando se pulsa la tecla Tab. FieldAutoAdvance Cuando esError! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. True, el control automáticamente avanzará al siguiente campo de E/S, cuando al ejecutarse el programa el número de caracteres introducido sea igual al valor establecido en la longitud máxima. OutOnly NError! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.o se pueden introducir valores en un campo de E/S. OverWrite Si el valor es True, el texto que se introduzca se reemplazará por el ya existente.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. Vamos a variar las siguientes Propiedades: 1. Cambiar las siguientes propiedades para el campo ioTendered: ioTendered Propiedad Alignment Decimals EditCode FieldAdvance MultiLine NumericLength Valor 1 2 5 True True 7 ioTotal Propiedad Alignment Decimals EditCode FieldAdvance MultiLine NumericLength Valor 1 2 5 True True 7 ioChange Propiedad Valor Capítulo 3 Alignment Decimals EditCode MultiLine NumericLength OutOnly Responder a Eventos 43 1 2 5 True 7 True 2. Ejecuta el programa, introduciendo diferentes valores para Tendered y Total y calcula Change. 3. Cuando hayas acabado, salva el programa seleccionando Save Project en el menú File. Esta vez, AVR no te enseñará una pantalla, ya que el formulario (.vrf) y el proyecto (.vrm) se salvarán en el mismo directorio y con los mismos nombres que se especificaron al final del capítulo 2. 44 ASNA Visual RPG para Principiantes Resumen del capítulo 3 Para Hay que Crear un Botón de Mandato Seleccionar el control de Botón de Mandato en la paleta y marcar el tamaño en el formulario. Añadir un comentario en el editor de código. Dejar en blanco la especificación de hoja, en la columna 1. Abrir el comentario con /* y cerrarlo con */ o iniciarlo con //. Alinear el texto a la derecha, izquierda o centro del campo de E/S Cambiar la propiedad Alignment. Definir el número de dígitos a la derecha de la coma decimal Cambiar la propiedad Decimals. Formatear y editar campos numéricos Cambiar la propiedad EditCode. Especificar que la salida de campo e intro actúen como la tecla de tabulador Cambiar la propiedad FieldAdvance. Especificar que un capo de entrada permita múltiples líneas de texto Cambiar la propiedad MultiLine. Editar campos numéricos Cambiar la propiedad NumericLength. Especificar que el usuario no pueda introducir datos Cambiar la propiedad OutOnly. Botón/Mdato. Capítulo 3 Responder a Eventos 45 Más InformaciónError! Bookmark not defined.Error! Bookmark not defined. Para encontrar más información de los temas tratados en este capítulo, puede consultar: los archivos de ayuda, el capítulo correspondiente en el manual, o la ayuda en línea. Recuerde que siempre puede ponerse en contacto telefónico con CaCovai 400 (Distribuidor Exclusivo de ASNA Visual RPG en España, Andorra y Portugal) , o enviar un correo electrónico a [email protected]. Para conocer las novedades de AVR consulte las página web: http://www.cacovai.com http://www.asna.com Archivos de Ayuda de Consulta: • Event driven programming • Event subroutines • Comments, adding • Control box, in editor • Event procedure box, editor • Properties, listing of • Alignment property • Decimals property • EditCode property • FieldAdvance property • MultiLine property • NumericLength property • OutOnly property Manual/Manual en Línea: • Capítulo 9 – Fundamentos de Programación. • Manual de Referencias de Lenguaje – contiente en orden alfabético todas las propiedades, controles, eventos, métodos, etc.