6.- Progr. Controles (II)
Seguimos con la programación de los controles, en este capítulo veremos la programación de los eventos de los controles que conforman la barra de herramientas. Es decir los botones que tenemos abajo en un recuadro azul y que nos permiten controlar el fichero.

Empezando de izquierda a derecha, nos encontramos con cuatro botones con flechas que nos van a servir para desplazarnos rapidamente por el fichero. Al ser todos botones, el evento que tenemos en cada caso es el que hace referencia al CLICK sobre dicho botón, veamos la programación de los cuatro botones.

Control: INICIO
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     WORKING-STORAGE SECTION.
     PROCEDURE   DIVISION.
            IF TOPE = 0 GO DOS.
            MOVE TCOD (1) TO AGECOD
            MOVE 1 TO CCC
            READ AGENDA INVALID KEY GO DOS
                      NOT INVALID KEY CALL "EXISTE".
            EXIT PROGRAM.               
     DOS.
            CALL SETFOCUS OF AGE-COD
            EXIT PROGRAM.


Como teníamos los códigos de nuestros contactos en una tabla, lo único que hacemos es mover el primer elemento de la tabla y leer. Para irnos al final del fichero hacemos lo mismo, solo que moviendo el último elemento de la tabla, veámoslo:

Control: FIN
Evento : CLICK
Programación
    ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
            IF TOPE = 0 GO DOS.
            MOVE TCOD (TOPE) TO AGECOD
            MOVE 1 TO CCC
            READ AGENDA INVALID KEY GO DOS
                      NOT INVALID KEY CALL "EXISTE".
            EXIT PROGRAM.               
     DOS.
            CALL SETFOCUS OF AGE-COD
            EXIT PROGRAM.


Ahora veamos como avanzamos o retrocedemos por el fichero con los botones de las flechas izquierda y derecha:

Control: MAS
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
            IF TOPE = 0 GO DOS.
            ADD 1 TO CCC IF CCC > TOPE MOVE TOPE TO CCC.
            MOVE TCOD (CCC) TO AGECOD.
            READ AGENDA INVALID KEY GO DOS
                      NOT INVALID KEY CALL "EXISTE".
            EXIT PROGRAM.               
     DOS.
            CALL SETFOCUS OF AGE-COD
            EXIT PROGRAM.

Control: MENOS
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
            IF TOPE = 0 GO DOS.
            SUBTRACT 1 FROM CCC IF CCC < 1 MOVE 1 TO CCC.
            MOVE TCOD (CCC) TO AGECOD.
            READ AGENDA INVALID KEY GO DOS
                      NOT INVALID KEY CALL "EXISTE".
            EXIT PROGRAM.               


Una vez vistos los controles para el movimiento por el fichero, seguirmos analizando los demás botones de la barra de herramientas.

El botón que sigue es el de borrar y su objetivo será el de eliminar el registro que en ese momento se encuentre en la pantalla. Como es algo delicado aprovechamos la posibilidad de sacar una ventana de verificación con DISPLAYMESSAGE y si la respuesta es positiva borramos el registro. Este botón estará activo solo cuando tengamos un registro presente. Veamos su programación:

Control: BORRAR
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     WORKING-STORAGE SECTION.
     01  ESTILO    PIC S9(4) COMP-5.
     PROCEDURE   DIVISION.
            ADD POW-DMYESNO POW-DMICONQUESTION GIVING ESTILO
            CALL DISPLAYMESSAGE OF PRIMERA
                   USING "Seguro de borrarlo ?" "Mensaje" ESTILO.
            IF PROGRAM-STATUS = POW-DMRYES GO UNO ELSE GO FINALIZAR.
     UNO.
            ADD POW-DMICONEXCLAMATION POW-DMOK GIVING ESTILO.
            DELETE AGENDA INVALID KEY
                   MOVE STAAGE TO NUMSTA MOVE "BORRAR" TO NOMSTA
                   CALL DISPLAYMESSAGE OF PRIMERA
                   USING MENSAJE "ERROR" ESTILO.
            CALL "CARGAR".
            EXIT PROGRAM.
      FINALIZAR.
            EXIT PROGRAM.               


A continuación el botón cancelar lo único que hace es volver a enviar el foco al control AGE-COD, para introducir un nuevo código.

Control: CANCELAR
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
            MOVE 1 TO POW-ENABLE OF AGE-COD
            CALL SETFOCUS OF AGE-COD.


El Botón de listar, lo que hará será una impresión de la pantalla, pero claro, solo de los campos que tengamos con la propiedad de Printable seleccionada. Esto viene muy bien y nos puede ayudar mucho por la facilidad de uso. Este control solo estará activo cuando tengamos un registro presente. Como aclaración os digo que los controles de ListBox y Table, aunque su contenido no quepa en la pantalla, en la impresora si se imprimirán por completo. Al igual que en el anterior mostramos previamente una ventana de advertencia.

Control: LISTAR
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     WORKING-STORAGE SECTION.
     01  ESTILO     PIC S9(4) COMP-5.
     PROCEDURE   DIVISION.
           ADD POW-DMYESNO POW-DMICONQUESTION GIVING ESTILO
           CALL DISPLAYMESSAGE OF PRIMERA
                     USING "Listar la ficha ?" "Mensaje" ESTILO.
           IF PROGRAM-STATUS = POW-DMRYES GO UNO ELSE GO FINALIZAR.
     UNO.
           CALL OPENPRINTER OF PRINT1.
           CALL WRITESHEET OF PRINT1.
           CALL CLOSEPRINTER OF PRINT1.
           EXIT PROGRAM.
     FINALIZAR.
           EXIT PROGRAM.
El botón del e-mail, nos llamará al Outlook Express de Microsoft para enviar un correo como vimos en la sección de trucos. Este control solo estará disponible cuando haya un registro presente. También comprobaremos que el campo del e-mail en nuestro registro tenga datos antes de enviar nada.

Control: EMAIL
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     WORKING-STORAGE SECTION.
     01  LLAMADA.
            02  FILLER PIC X(30) VALUE "c:archiv~1outloo~1msimn.exe".
            02  FILLER PIC X(17) VALUE " /mailurl:mailto:".
            02  LLAMAI PIC X(30).
     01  ESTILO PIC S9(4) COMP-5.
     PROCEDURE DIVISION.
           IF AGEMAI = SPACES GO SINMAIL.
           MOVE AGEMAI TO LLAMAI.
           CALL EXECAPL OF DDE1 USING LLAMADA POW-SWNORMAL.
           EXIT PROGRAM.
     SINMAIL.
           ADD POW-DMOK POW-DMICONSTOP GIVING ESTILO
           CALL DISPLAYMESSAGE OF PRIMERA
                     USING "Introduzca una dirección de correo" "Error" ESTILO.
           EXIT PROGRAM.


Veamos ahora el botón de grabar los datos del registro. Este botón cambia de nombre (GRABAR, REGRABAR) dependiendo si es un alta o una modificación, así también controlaremos si es un WRITE o un REWRITE lo que tenemos que hacer. Es el evento mas largo de todos los que hemos visto. Este será el momento de mover todos los datos que hemos introducido en los controles a nuestros campos del registro y de comprobar cuales de ellos queremos como obligatorios, en nuestro caso solo el del nombre, pero si queréis poner mas solo tenéis que añadir líneas iguales a las del control del nombre. Veamos su programación:

Control: GRABAR
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     WORKING-STORAGE SECTION.
     01  ESTILO PIC S9(4) COMP-5.
     PROCEDURE DIVISION.
            MOVE POW-TEXT OF AGE-NOM TO AGENOM.
            MOVE POW-TEXT OF AGE-DOM TO AGEDOM.
            MOVE POW-TEXT OF AGE-POB TO AGEPOB.
            MOVE POW-NUMERIC OF AGE-POS TO AGEPOS.
            MOVE POW-TEXT OF AGE-PRO TO AGEPRO.
            IF POW-CHECK OF AGE-GEH = POW-ON MOVE "H" TO AGEGEN ELSE
                 MOVE "M" TO AGEGEN
            END-IF
            MOVE POW-SELECT OF AGE-TIP TO AGETIP.
            MOVE POW-TEXT OF AGE-TEL TO AGETEL.
            MOVE POW-TEXT OF AGE-MOV TO AGEMOV.
            MOVE POW-TEXT OF AGE-MAI TO AGEMAI.
            MOVE POW-TEXT OF AGE-WEB TO AGEWEB.
            IF AGENOM = SPACES GO SINNOM.
            ADD POW-DMICONEXCLAMATION POW-DMOK GIVING ESTILO.
            IF POW-TEXT OF L-GRABAR = "Grabar"
                   WRITE REGAGE INVALID KEY   MOVE STAAGE TO NUMSTA
                   MOVE "GRABAR" TO NOMSTA CALL DISPLAYMESSAGE OF PRIMERA
                   USING MENSAJE "ERROR" ESTILO.
            IF POW-TEXT OF L-GRABAR = "Regrabar"
                   REWRITE REGAGE INVALID KEY  MOVE STAAGE TO NUMSTA
                   MOVE "REGRABAR" TO NOMSTA  CALL DISPLAYMESSAGE OF PRIMERA
                   USING MENSAJE "ERROR" ESTILO.
            CALL "CARGAR".
            CALL "PONCCC".
            EXIT PROGRAM.
     SINNOM.
            ADD POW-DMICONEXCLAMATION POW-DMOK GIVING ESTILO.
            CALL DISPLAYMESSAGE OF PRIMERA
                  USING  "Nombre obligatorio" "ERROR" ESTILO.
            CALL SETFOCUS OF AGE-NOM.
            EXIT PROGRAM.


Los botones que nos quedan están repetidos en la aplicación, ya que podremos acceder desde ellos o desde el menú que creamos en el capítulo 4. El código lo pondremos en los dos eventos y así actuaraá igual si se pulsa el botón o si se selecciona la opción desde el menú. Cuando se creo el menú no se le pusieron nombre a las opciones, así que Power le habrá puesto una por defecto del tipo MENU1, MENU2, etc ... Solo tenéis que buscar la correspondiente y asignarle el evento CLICK.

El botón de CONSULTA, simplemente nos llama a otra ventana en la cual vamos a efectuar la consulta y además pone la pantalla principal deshabilitada para que no se pueda tocar mientras estamos en la consulta.

Control: CONSULTA    -   MENUCONSULTA
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
            MOVE POW-OFF TO POW-ENABLE OF PRIMERA
            CALL OPENSHEET OF  PRIMERA USING "CONSULTA".


El botón de SALIR, nos sirve para abandonar la aplicación y lo único que hace es llamar a la rutina PARASALIR.

Control: SALIR    -   MENUSALIR
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
            CALL "PARASALIR".


En este caso no es el botón sino, la imagen que tenemos a la izquierda de la ventana, la que pone la dirección de la página, la que nos sirve de botón y al igual que las otras se repite en el menú y con ella sacamos una ventana donde se nos explica sobre el programa.

Control: IMAGEN    -   MENUIMAGEN
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
            MOVE POW-OFF TO POW-ENABLE OF PRIMERA
            CALL OPENSHEET OF  PRIMERA USING "ACERCA".


Llegados a este punto, toda la programación de nuestra ventana principal se da por terminada y para los capítulos restantes, nos queda explicar la ventana de ACERCA que es muy fácil y la que he realizado para la consulta.

Si hasta aquí algo no ha quedado claro, es el momento de las consultas. Ya que lo importante no es que salga bien sino que comprendáis todo lo que se ha explicado.

En este momento se puede compilar todo y debe de funcionar sin problemas, altas, bajas, modificar, todo excepto la consulta.



Este artículo proviene de Cobol en español
http://www.escobol.com

La dirección de esta noticia es:
http://www.escobol.com/modules.php?name=Sections&op=viewarticle&artid=66