¿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 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 DISPLAY WIN (2) 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: |
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.