5.- Progr. Controles (I)
En el capítulo anterior vimos la programación de las rutinas ahora es el momento de ver como se programan los eventos de los controles que tenemos en nuestra pantalla.

Una de las grandes diferencias que al menos yo he encontrado, es que cuando se programa de manera tradicional, vas teniendo el control de cada campo por separado, ahora en cambio el usuario con el ratón se puede ir a cualquier campo y dejar otros en blanco. Para evitar un poco el descontrol, he optado por lo siguiente. Nuestro primer campo a pedir es el código y por lo tanto una vez nos situemos sobre el siempre vamos a deshabilitar todos los demás campos y dejarlos sin contenido, así el usuario estará obligado a entrar un código antes de hacer nada, además aprovechamos y colocamos el número siguiente de código libre, veamos su programación:

Control: AGE-COD
Evento : EDIT
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     WORKING-STORAGE SECTION.
     01  SIGUE PIC 9999.
     PROCEDURE   DIVISION.
          MOVE SPACES TO POW-TEXT OF AGE-NOM
          MOVE SPACES TO POW-TEXT OF AGE-DOM
          MOVE SPACES TO POW-TEXT OF AGE-POB
          MOVE 0          TO POW-NUMERIC OF AGE-POS
          MOVE SPACES TO POW-TEXT OF AGE-PRO
          MOVE SPACES TO POW-TEXT OF AGE-MOV
          MOVE SPACES TO POW-TEXT OF AGE-TEL
          MOVE SPACES TO POW-TEXT OF AGE-MAI
          MOVE SPACES TO POW-TEXT OF AGE-WEB

          MOVE 0 TO POW-ENABLE OF AGE-NOM
          MOVE 0 TO POW-ENABLE OF AGE-DOM
          MOVE 0 TO POW-ENABLE OF AGE-POB
          MOVE 0 TO POW-ENABLE OF AGE-POS
          MOVE 0 TO POW-ENABLE OF AGE-PRO
          MOVE 0 TO POW-ENABLE OF AGE-GEH
          MOVE 0 TO POW-ENABLE OF AGE-GEM
          MOVE 0 TO POW-ENABLE OF AGE-TIP
          MOVE 0 TO POW-ENABLE OF AGE-MOV
          MOVE 0 TO POW-ENABLE OF AGE-TEL
          MOVE 0 TO POW-ENABLE OF AGE-MAI
          MOVE 0 TO POW-ENABLE OF AGE-WEB
          MOVE 0 TO POW-ENABLE OF GRABAR
          MOVE 0 TO POW-ENABLE OF L-GRABAR
          MOVE 0 TO POW-ENABLE OF BORRAR
          MOVE 0 TO POW-ENABLE OF L-BORRAR
          MOVE 0 TO POW-ENABLE OF LISTAR
          MOVE 0 TO POW-ENABLE OF L-LISTAR
          MOVE 0 TO POW-ENABLE OF EMAIL
          MOVE 0 TO POW-ENABLE OF L-EMAIL
          MOVE 0 TO POW-ENABLE OF CANCELAR
          MOVE 0 TO POW-ENABLE OF L-CANCELAR

          COMPUTE SIGUE = TOPE + 1
          MOVE SIGUE TO POW-NUMERIC OF AGE-COD.


Ahora, una vez pulsado Return sobre el código introducido generamos otro evento en el que se comprueba si existe o no y dependiendo se realizará una función u otra. Si existe el código llamamos a la rutina existe, que se encarga de colocarnos todos los contenidos de los campos y podremos, modificarlos, borrar, regrabar, etc .... En caso de no existir pone de nuevo los demás campos habilitados y nos envía al siguiente que en este caso es AGE-NOM. Veamos su programación:

Control: AGE-COD
Evento : RETURN
Programación
    ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          MOVE POW-NUMERIC OF AGE-COD TO AGECOD
          IF AGECOD = 0 GO DOS
          END-IF
          READ AGENDA INVALID KEY GO TRES
                  NOT INVALID KEY CALL "EXISTE"
          END-READ
          CALL "PONCCC"
          EXIT PROGRAM.

     DOS.
         CALL SETFOCUS OF AGE-COD
         EXIT PROGRAM.

     TRES.
         MOVE 1 TO POW-ENABLE OF AGE-NOM
         MOVE 1 TO POW-ENABLE OF AGE-DOM
         MOVE 1 TO POW-ENABLE OF AGE-POB
         MOVE 1 TO POW-ENABLE OF AGE-POS
         MOVE 1 TO POW-ENABLE OF AGE-PRO
         MOVE 1 TO POW-ENABLE OF AGE-GEH
         MOVE 1 TO POW-ENABLE OF AGE-GEM
         MOVE 1 TO POW-ENABLE OF AGE-TIP
         MOVE 1 TO POW-ENABLE OF AGE-MOV
         MOVE 1 TO POW-ENABLE OF AGE-TEL
         MOVE 1 TO POW-ENABLE OF AGE-MAI
         MOVE 1 TO POW-ENABLE OF AGE-WEB
         MOVE 1 TO POW-SELECT OF AGE-TIP
         INITIALIZE REGAGE
         MOVE POW-NUMERIC OF AGE-COD TO AGECOD
         CALL SETFOCUS OF AGE-NOM
         MOVE "Grabar" TO POW-TEXT OF L-GRABAR
         MOVE 1 TO POW-ENABLE OF GRABAR
         MOVE 1 TO POW-ENABLE OF L-GRABAR
         MOVE 1 TO POW-ENABLE OF CANCELAR
         MOVE 1 TO POW-ENABLE OF L-CANCELAR
         EXIT PROGRAM.


A partir de aquí y para los demás controles normalmente lo que haremos será ir pasando el foco al siguiente campo cada vez que pulsemos RETURN, como lo haríamos en un programa convencional. Por supuesto el usuario podrá ir libremente por cada campo. Cuando se pulse el botón de Grabar será cuando se realicen los controles en los campos que consideremos como obligatorios. Veamos toda la programación aunque sea muy simple.
Control: AGE-NOM
Evento : RETURN
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          CALL SETFOCUS OF AGE-DOM

Control: AGE-DOM
Evento : RETURN
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          CALL SETFOCUS OF AGE-POB

Control: AGE-POB
Evento : RETURN
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          CALL SETFOCUS OF AGE-POS

Control: AGE-POS
Evento : RETURN
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          CALL SETFOCUS OF AGE-PRO

Control: AGE-PRO
Evento : RETURN
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          CALL SETFOCUS OF AGE-GEH

Control: AGE-GEH
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
         IF POW-CHECK OF AGE-GEH = POW-ON MOVE "H" TO AGEGEN ELSE
                MOVE "M" TO AGEGEN
          END-IF
          CALL SETFOCUS OF AGE-TIP

Control: AGE-GEM
Evento : CLICK
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
         IF POW-CHECK OF AGE-GEM = POW-ON MOVE "M" TO AGEGEN ELSE
                MOVE "H" TO AGEGEN
          END-IF
          CALL SETFOCUS OF AGE-TIP

Control: AGE-TIP
Evento : CHANGE
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          MOVE POW-SELECT OF AGE-TIP TO AGETIP
          CALL SETFOCUS OF AGE-TEL

Control: AGE-TIP
Evento : SELCHANGE
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          MOVE POW-SELECT OF AGE-TIP TO AGETIP
          CALL SETFOCUS OF AGE-TEL

Control: AGE-TIP
Evento : EDIT
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          IF POW-TEXT OF L-GRABAR = "Grabar"
               MOVE 1 TO POW-SELECT OF AGE-TIP
          END-IF

Control: AGE-TEL
Evento : RETURN
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          CALL SETFOCUS OF AGE-MOV

Control: AGE-MOV
Evento : RETURN
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          CALL SETFOCUS OF AGE-MAI

Control: AGE-MAI
Evento : RETURN
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          CALL SETFOCUS OF AGE-WEB

Control: AGE-WEB
Evento : RETURN
Programación
     ENVIRONMENT DIVISION.
     DATA        DIVISION.
     PROCEDURE   DIVISION.
          CALL SETFOCUS OF GRABAR


Como véis casi todo ha sido igual, con la excepción de los controles que hacen referencia al género y al tipo de contacto. Si os dais cuenta el evento que se produce cuando editamos AGE-TIP, determinamos que si estamos introduciendo un contacto nuevo (cosa que sabemos por el nombre del control GRABAR), seleccionamos directamente el valor 1.

En el próximo capítulo se explicarán los eventos de los controles que conforman la barra de herramientas, que son los decisivos y sobre los cuales controlaremos nuestro archivo.



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=65