
Ventanas
¿Que son y para que sirven las "ventanas" en cobol ?.
Este nombre del que estamos tan acostumbrados a oir y que parece que es propiedad de
Microsoft, tiene otras y muy diversas utilidades. Una ventana es en realidad una porción
virtual de la pantalla, la cual podremos definir con unas características propias de
tamaño, color, etc ...
Hasta que éstas aparecieron,
cada vez que queriamos sobreponer una información a la que teníamos en pantalla, la
construiamos encima y después, debiamos de volver a pintar la que estuviera debajo. Con
el uso de las ventanas ésto ya no es necesario. Os pondré un ejemplo:
Supongamos que tenemos un mantenimiento de
clientes, el cual nos ocupa toda la pantalla, y vamos a introducir la provincia. Si en
éste momento quisieramos mostrarle una tabla con todas las opciones posibles, era
necesario dibujarla encima y una vez seleccionada la provincia adecuada, volver a pintar
la pantalla de mantenimiento que habíamos dejado debajo. Pues bien con el uso de las
ventanas, ésto ya no es necesario, porque lo que hacemos es crear una ventana (una
pantalla virtual) de las dimensiones que queramos, trabajamos todo lo que queramos con
ella y cuando no nos haga falta, la cerramos y lo que había debajo en la pantalla
"principal" quedará como estaba. Espero que me hayais entendido, para poder
seguir explicando su utilización.
Yo conozco el uso en Acucobol
y RM/Cobol, por lo que la explicación irá orientada a éstos dos compiladores, si
alguien conoce la de otros, le animo a que me facilite la explicación.
Debemos de tener en cuenta que aunque la
sintaxis sea diferente en cada uno de los compiladores, la funcionalidad, el uso y la
idea, son las mismas. Antes de pasar a la explicación tendremos que tener en cuenta:
- Podremos tener tantas ventanas abiertas
como queramos.
- El control siempre estará sobre la
ventana activa, no podremos trabajar desde una ventana en otra.
- La linea 1 y la columna 1 corresponderán
a la esquina superior izquierda de la ventana y no a la de la pantalla.
- Las características de la ventana se
darán en el momento de su creación y serán, título, posición del título, borde,
color, tamaño, etc ....
VENTANAS EN RM/COBOL.
En RM/Cobol, todas las
características se dan mediante unas variables definidas en la WORKING, éstas son las
siguientes. Por supuesto le puedes poner el nombre que quieras a las variables, ya que lo
que al final vamos a conseguir es darle una variable con longitud 80 y una sentencia para
que la ventana se dibuje.
01 WCB.
03 WINCAB
PIC 999 BINARY
VALUE 0.
03 WINLIN
PIC 999
BINARY.
03 WINCOL
PIC 999 BINARY.
03 WINLOC
PIC X VALUE
"S".
* (S-W)
03 WINBORST
PIC X VALUE "Y".
* (Y-N)
03 WINBORTI
PIC 9 VALUE 2.
03 WINBORCH
PIC X.
03 WINLLE
PIC X.
* (Y-N)
03 WINLLECH
PIC X.
03 WINTITSI
PIC X VALUE "T".
* (T-B)
03 WINTITPO
PIC X VALUE "C".
* (C-L-R)
03 WINTITLO
PIC 999 BINARY.
03 WINTIT
PIC X(64).
|
Explicación de las variables: (de las importantes).
WCB: Aquí se
guardará toda la información para luego dibujar la ventana, podeis ponerle el nombre que
querais, tanto a ésta como al resto.
WINLIN: Número de lineas que va a tener la ventana.
WINCOL: Número de columnas que va a tener la ventana.
WINBORST: (Y)ES (N)O, si va a tener o no, borde.
WINBORTI: Tipo de borde, hay cuatro tipos distintos.
WINTITSI: (T)OP (B)UTTON, posición del título, arriba o abajo.
WINTITPO: (C)ENTER (L)EFT (R)IGHT, justificación del título.
WINTITLO: Longitud en caracteres del título.
WINTIT: Título de la ventana.
La sentencia que utilizamos para crearla es DISPLAY, pero con unos matices distintos como vamos a ver a continuación.
Primero moveríamos los valores adecuados a las variables y luego la sentencia, veamos como quedaría:
MOVE 10 TO WINLIN.
MOVE 40 TO WINCOL.
MOVE " PROBANDO VENTANAS " TO WINTIT.
MOVE 19 TO WINTITLO.
DISPLAY WCB LINE 3 COL 3 LOW ERASE
CONTROL "WINDOW-CREATE".
* asi
creariamos la ventana, los otros valores de las variables se
* pueden asignar con values, porque normalmente no cambian.
* A partir de éste momento, todo lo que hagamos, se hará sobre
* ésta ventana. Para cerrarla utilizariamos ésta sentencia.
DISPLAY WCB CONTROL
"WINDOW-REMOVE". |
Si quisieramos abrir mas ventanas, en vez de
displayar directamente la variable WCB, ésta la guardariamos en una tabla por ejemplo:
WORKING-STORAGE SECTION.
01 VENTANAS.
02 WIN PIC X(80) OCCURS 10
TIMES.
...
...
PROCEDURE DIVISION.
...
...
MOVE 10 TO WINLIN.
MOVE 40 TO WINCOL.
MOVE " PROBANDO VENTANAS " TO WINTIT.
MOVE 19 TO WINTITLO.
MOVE WCB TO WIN (1).
DISPLAY WIN (1) LINE 3 COL 3 LOW ERASE
CONTROL "WINDOW-CREATE".
MOVE 1 TO WINLIN.
MOVE 30 TO WINCOL.
MOVE SPACES TO WINTIT MOVE 0 TO WINTITLO.
MOVE WCB TO WIN (2).
DISPLAY WIN (2) LINE 5 COL 10 LOW ERASE
CONTROL "WINDOW-CREATE".
* Cuando
usamos mas de una ventana, deberemos de ir
* cerrándolas según la última que se abrió.
DISPLAY WIN (2) CONTROL
"WINDOW-REMOVE".
DISPLAY WIN (1) CONTROL "WINDOW-REMOVE". |
VENTANAS EN ACUCOBOL.
Para dibujar una ventana en
Acucobol, todo se realizará desde la Procedure y solo será necesario incluir en la
WORKING una variable de PIC X(10), que nos servirá principalmente para tener varias
ventanas abiertas y saber sobre cual actuamos. Esto se consigue con una implementación de
la sentencia DISPLAY, que vamos a explicar a continuación.
WORKING-STORAGE SECTION.
01 VENTANAS.
02 WIN PIC
X(10) OCCURS 10 TIMES.
...
...
PROCEDURE DIVISION.
...
...
DISPLAY WINDOW LINE 3 COL 3 LOW ERASE
SIZE 40 LINES 10
BOXED SHADOW
TOP CENTERED TITLE " PROBANDO "
POP-UP AREA WIN (1).
* Para cerrarla,
utilizaremos la siguiente instrucción.
CLOSE WINDOW WIN (1).
Aqui, la gran diferencia, es que al no utilizar variables,
los valores se le dan en la propia sentencia, y la explicación de cada uno sería:
SIZE: Número de columnas de la ventana.
LINES: Número de líneas de la ventana.
BOXED: Indicamos que lleva borde.
SHADOW: Indicamos que lleva efecto de sombra.
TOP: Posición del título. (TOP-BOTTOM)
CENTERED: Justificación del título. (CENTERED, LEFT, RIGHT).
POP-UP AREA: donde se guarda la ventana. |
La sentencia DISPLAY WINDOW, en Acucobol, es mucho mas
extensa, incluyendo sobre todo una muy buena aplicación de los colores, tanto para el
fondo como para el primer plano.
RESUMIENDO
Ya veis, que aunque cambie un poco la sintaxis, el fin es exactamente el
mismo, disponer de una parte de la pantalla con autonomía propia.
Solo espero que después de éstas explicaciones seais
capaces de aprovechar todas las ventajas que nos puede proporcionar el trabajar con
ventanas. Yo siempre las he utilizado, eso si, tampoco deberemos de hacer de un programa
cobol, una serie de ventanas, hay que utilizarlas cuando realmente las necesitemos.
Recordad que:
El control solo será sobre la ventana activa.
Una vez abierta una ventana, ésta tendrá el control, hasta que se cierre.
Por supuesto, todas la variables que utilicemos serán portables entre ventanas, ya
que en realidad estaremos en el mismo programa.
|
|