
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.
|
|