57 Métodos Que aprenderás en el capítulo 5: • Que es un método. • Como llamar a los métodos en un control. • Como desactivar un control. • Como añadir un List Box en un formulario. • Como controlar el orden a seguir por la tecla de tabulación. • Como añadir una imagen en un formulario. Tiempo Aproximado para finalizar el capítulo 5: 1 hora ½. Aspecto que tendrá la aplicación al finalizar este capítulo: 58 ASNA Visual RPG para Principiantes Desactivar un Control Hemos visto como enseñar al usuario una caja de mensajes que indica que se ha introducido un error trivial. Sin embargo, nuestra aplicación será mejor , si no permitimos al usuario que cometa ningún error lógico. Desde nuestro programa, no podemos evitar que nos pulsen el click del botón Pay, si el acumulado es inferior que el total de la cuenta. El botón Pay lo desactivaremos hasta que el usuario introduzca un valor en el campo tendered. IOFields lanzan un evento cada vez que el usuario o el programa cambia el contenido, por lo tanto podemos manejar el evento Change para los campos Error! Bookmark not defined.Error! Bookmark not defined. ioTendered e ioTotal. En el evento, podemos llamar a una subrutina (EnablePay) para validar si el acumulado introducido es correcto. Si este es correcto, nosotros activaremos el botón o de lo contrario lo desactivaremos. Desactivar un control es simplemente cambiarle el valor de la propiedad Enabled a Falso. Vamos a Codificar el Tratamiento de Eventos 1. Vamos a codificar 2 tratamientos de eventos para la subrutina EnablePay como se muestra a continuación: 2. En el evento tratado al pulsar el botón Pay, no necesitamos validar la cuenta de tendered. Cuando una cajera ha elegido Pay, nosotros desactivaremos los botones Buy y Pay y activaremos el botón New Client. Vamos a codificar la subrutina btnPay-Click como se muestra a continuación: Capítulo 5 Métodos 59 Cuando la cajera pulsaError! Bookmark not defined.Error! Bookmark not defined. el botón New Client , limpiaremos los campos de E/S. Desactivaremos el botón New y activaremos el botón Buy. También desactivaremos los botones Pay y New en tiempo de diseño. Métodos En capítulos anteriores has aprendido que: 1. Los controles tienen propiedades que determinan su comportamiento. 2. Los controles generan eventos, que provocan que un programa conozca la acción del usuario Los controles tienen también Métodos asociados. Los métodos son subrutinas que manejan las propiedades de los controles, y pueden se llamadas desde el programa para alterar la apariencia o el comportamiento del control. Por ejemplo, los controles Combo Box y List Box tienen un método llamado AddItem, que nos permite añadir una línea a la lista. A continuación hay una lista con los métodos más comunes y los controles que pueden operar con ellos: AddItem Añade un línea a un Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.List Box o Combo Box, o añade una nueva file a los controles de Subfichero y Grid. ClearObj Inicializa todos los campos de los controles: Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.IOField, List Box, Combo Box, Subfile, Grid, Command Button, Option Button y Scrollbar. MoveObj Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! 60 ASNA Visual RPG para Principiantes Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Mueve cualquier control, incluido el form, a unas nuevas coordinadas de la ventana. List Box Refresh Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Fuerza el refresco inmediato de cualquier control, incluido el formulario. RemoveItem Elimina una línea especifica de un Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.List Box o Combo Box, o elimina un fila de un Subfichero o un Grid. SetFocus Sitúa le foco de entrada en cualquier controlError! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.. Vamos a añadir una List Box (Caja de lista) 1. Añadir una List Box en tu formulario, seleccionando el botón List Box de la paleta de control. En la List Box, guardaremos los artículos comprados por el cliente. 2. Ponga en la propiedad Name de la list box el valor lstReceipt (primer articulo comprado) y en la propiedad Font el valor Courier New con el tamaño 7. (Puedes introducir directamente el numero correspondiente al tamaño del campo, sin necesidad de desplegar la lista). Existen 2 tipos de fuentes en windows:Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. Monoespaciado y Proporcional. • Monoespaciado: Son los tipos de fuentes que utilizan el mismo espacio por carácter, por ejemplo, ocupan el mismo espacio la letra W y la i. Courier, Courier New, y Lucida Console son ejemplos de fuentes monoespaciados. • Proporcional: Son los tipos de fuentes, que tanto en la pantalla como en un listado los caracteres ocupan espacios proporcionales al tamaño de los caracteres. Por ejemplo Times New Roman. Capítulo 5 Métodos 61 Para cada artículo que compra el cliente, añadiremos una línea en la lista lstReceipt que contenga la cantidad, descripción y precio. Esta información ya la tenemos en la subrutina asociada al evento click del botón btnBuy. Añadiremos una subrutina con 3 campos y usaremos el método AddItem para añadirla la lista. En AVR, puedes invocar a un método usando el control Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.EVAL como se muestra a continuación: C EVAL lstReceipt.addItem(LineItem) 62 ASNA Visual RPG para Principiantes Vamos a añadir una Estructura de Datos 1. Vamos añadir la estructura de datos LineItem: Recuerda que puedes introducir una 'S' en la primera columna del editor para escribir la especificación de una estructura de datos, y a continuación escribir en la primera columna de la siguiente línea una Error! Bookmark not defined.'B' para introducir los campos de la estructura. Cada vez que se añade un artículo al final de la lista, este aparecerá al final de la pantalla. En la pantalla hay una área asignada para que vayan apareciendo los artículos, en caso de que no cupiesen automáticamente aparecerá una barra de scroll vertical. Utilizando esta barra la cajera podrá consultar la lista de productos introducidos. Cuando añadimos campos al final de una list box, es una ayuda ver que siempre los coloca al final de la lista. Hay 2 propiedades que ayudan a conseguirlo. Esta propiedades sólo se pueden modificar en tiempo de ejecución. • ListCount – Nos dice el número de valores que contiene la lista.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. • TopIndex -Error! Bookmark not defined.Error! Bookmark not defined. Determina que el list box, empieza con el valor 0, que será el valor que se mostrará como primer valor. Desde TopIndex se inicia con el 0, extraeremos el valor de ListCount para determinar el nuevo valor de TopIndex. Con este valor TopIndex será el último valor de la lista. La List Box permite ajustar el TopIndex para cuando haya líneas vacías en la ventana del Listbox. Capítulo 5 Métodos 63 Vamos a completar el programa 1. Vamos a cambiar el código para una nueva versión del evento Click para el botón btnBuy, como se muestra: Hay otra cosa más que debemos hacer en el List Box . Cuando procesamos el evento click en el botón btnNew, inicializar la lista. 2. Para limpiar la lista, invocaremos el método ClearObj: No olvidarse del paréntesis ( ) después de ClearObj. El paréntesis indica que el compilador quiere ejecutar un método. 64 ASNA Visual RPG para Principiantes Asignar el orden de tabulación La propiedad TabIndexError! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. determina el orden en que AVR remarca los campos IOFields, botones y otros controles en tiempo de ejecución. Cuando un control se remarca, se dice que tiene el foco. El foco es muy importante para las operaciones de teclado. Cuando el usuario pulsa intro, el control que tiene el foco es seleccionado o activado en el programa. El usuario puede cambiar el foco a otro control en el formulario pulsando la tecla del tabulador o pulsando click en otro objeto. El control con el TabIndex a 0 es el que recibe el foco al iniciarse el programa. El primer control que creas en un formulario , siempre tienen el TabIndex a 0. Por lo tanto el segundo control que crees tendrá el TabIndex con el valor 1. Se puede cambiar el orden en que los controles reciben el foco en el formulario, cambiando la propiedad TabIndex a cada control. Cuando cambias la propiedad TabIndex de un control, AVR automáticamente renumera el TabIndex de los otros controles. Es imposible que 2 controles tengan el mismo valor para la propiedad TabIndex. Si has creado algunos controles, puedes cambiar las propiedades TabIndex y TabStop, siguiendo los siguientes pasos: Vamos a cambiar las propiedades TabIndex y TabStop En los siguientes pasos cambiaremos las propiedades TabIndex y TabStop, tal como se muestra a continuación: 1. Click en el control que quieras que tenga el último foco. Este es, el objeto que tendrá en la propiedad tabindex el valor más alto. 2. Pon en la propiedad TabIndex el valor 0. 3. Click en el control que quieras remarcar entre el segundo al último. 4. Repite los pasos 2 y 3, hasta que en todos los controles tengas en la propiedad TabIndex el valor 0. Capítulo 5 Métodos 65 Cambia el valor de las propiedades TabIndex y TabStop: Control TabIndex TabStop lblQuantity 0 N/A ioQuantity 1 True lblItem 2 N/A ioItem 3 True lblPrice 4 N/A ioPrice 5 False lblAmount 6 N/A ioAmount 7 False btnBuy 8 True lblTendered 9 N/A ioTendered 10 True btnPay 11 True btnNew 12 True lblTotal 13 N/A ioTotal 14 False lblChange 15 N/A ioChange 16 False lstReceipt 17 False lblWelcome 18 N/A Si sigues estos pasos, el primer control que pulses será lblWelcome y el último será lblQuantity, que tendrá el TabIndex a 0. Del segundo al último que tu pulses será, ioQuantity, que tendrá el TabIndex a 1, etc. Visualizar Imágenes El control Image, permite visualizar una imagen, bitmap, icono, o metafichero. Usando la propiedad Picture especificas el gráfico que quieras usar. Una caja de dialogo se visualizará para poder seleccionar el directorio donde se encuentre la imagen. La propiedad Picture es sólo una propiedad en tiempo de diseño. Sin embargo , ASNA Visual RPG tiene un nuevo código de operación LOADPIC que permite cambiar la imagen en el control Image, en tiempo de ejecución. Vamos a añadir una Imagen 1. Image Control Selecciona el Control Image en la paleta de control y añádelo encima del control lstReceipt. Cambia el valor de Name a imgSpecial. 66 ASNA Visual RPG para Principiantes 2. Usa el botón en la propiedad Picture, busca el archivo wine.bmp en el directorio FoodMap dentro del directorio LearnAVR y pulsa un doble click. 3. Fíjate que el tamaño de la imagen es más grande que el control image. Para adecuar el tamaño de la imagen en el control cambia la propiedad Stretch al valor True. Tu pantalla quedará de la siguiente manera: Visualizar una imagen en el formulario: El directorio FoodMap contiene 5 bitmapsError! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. con imágenes de comida. Definiremos los nombres de estos archivos en una tabla llamada ImageName y la utilizaremos para variar la imagen cada vez que se introduzca un nuevo cliente. 1. Codifica la subrutina LoadFood para inicializar la tabla y la variable ImgIdx que se usará como índice de la tabla, como se ve a continuación: Capítulo 5 Métodos 67 68 ASNA Visual RPG para Principiantes 2. La tabla se declara utilizando la especificación de la hoja E, y en la hoja C llamaremos a la subrutina LoadFood. Tal como se muestra a continuación: 3. Vamos a añadir la siguiente codificación al final de la subrutina btnNew del evento Click: En el código superior, se utiliza el código de operación CAT para concatenar la vía de acceso del directorio, introduce en el factor 1, el siguiente valor. La longitud de BitMapFile pon 80 en lugar de 64.Error! Bookmark not defined.Error! Bookmark not defined. 'D:\Archivos de programa\Asna\Projects\LearnAVR\FoodMap\' El path de FoodMap puede ser diferente en tu ordenador. Depende de las opciones que hayas seleccionado durante la instalación de AVR. LOADPIC permite cambiar la imagen del control imgSpecial a otra imagen nueva. En caso de tener el error 'Access is denied' al ejecutar el programa, valida que hayas introducido correctamente la vía de acceso del directorio FoodMap y no te hayas olvidado ningún slash ‘\’. Capítulo 5 Métodos Resumen del capítulo 5 Para Hay que Añadir un valor en un List Box o Combo Box Usar el método AddItem.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. Añadir una nueva fila en un subfichero o en un control Grid Usar el método AddItem.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. Limpiar todos los datos de un control Usar el método ClearObj.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. Mover cualquier control a una nueva coordenada en la ventana de la pantalla Usar el método MoveObj.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. Forzar el refresco de cualquier control, incluido el formulario Usar el método Refresh.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. Eliminar un valor específico de un List Box o Combo Box, o eliminar una fila de un control subfichero o grid. Usar el método RemoveItem. Situar el foco de entrada en cualquier control. Usar el método SetFocus. Crear un List Box Seleccionar el control List Box en la paleta de control. Añadir una especificación de estructura de datos. Introducir una S en la primera columna del código de editor. Botón/Mdato. 69 70 ASNA Visual RPG para Principiantes Añadir una especificación de campo de estructura de datos. Introducir una B en la primera columna del código de editor. Ajusta un gráfico al tamaño de un control Poner en la propiedad Stretch el valor True del control Image. Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined.Error! Bookmark not defined. Capítulo 5 Métodos 71 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: • Change event • Enabled property • Methods, listing of • ListCount property • ClearObj method • TabIndex property • TabStop property • LOADPIC • Image control • Stretch property Manual/Manual en línea: • AVR Manual de Referencia de Lenguaje – Un listado alfabético de los códigos de operación, controles, eventos, propiedades y métodos de Visual RPG.