MsgBox
Para la interacción programa-usuario en LibreOffice contamos con diversos recursos; uno de los más sencillos es MsgBox, que está pensado para mandar mensajes y avisos de distinto tipo, pero que también sirve para el output (2) y para el input, aunque en este segundo caso gracias a su uso como función que remite a la bifurcación del programa en asociación con estructuras condicionales If. Aquí se expresa como función MsgBox().
Según lo dicho MsgBox cumple la doble función Input-Output. Si lo empleamos para el output muestra algún tipo de información, como en la imagen que sigue...
... pero si lo empleamos como input (función MsgBox() nos devuelve un valor numérico dependiendo del botón de comando que pulsemos. Esto nos permite capturar este valor y darle un determinado significado mediante el código.
Para la correcta configuración de MsgBox() debemos saber que admite varios parámetros, aunque sólo el primero (el mensaje o prompt) es obligatorio, facilitando opciones de mensaje, título, icono y comandos (3): MsgBox (Mensaje As String, Tipo As Integer, Titulo As String)
- Mensaje es el texto que deseamos mostrar. Puede expresarse en una o en varias líneas usando la función
Chr(13), que crea un salto de línea. Además podemos sustituir el texto por una variable de tipo String. - Título también es un parámetro de tipo String y, como su nombre indica, sirve para personalizar el título que presentará la ventana del MsgBox.
- Tipo es un parámetro de tipo Integer (en realidad una clave o conjunto de claves) que permite identificar el conjunto Icono + Botones (de uno a tres) siguiendo una combinación que se puede presentar como sumatorio o como resultado de la suma: en el primer caso, el primer sumando representa el comando o botón activo (4), el segundo sumando representa el código del comando o comandos (botones) que se muestran y el tercero indica el icono que mostrará MsgBox(). Puede haber un tercer sumando que sirve para indicar cual de los dos o tres botones es el seleccionado por defecto. El cuadro que sigue facilita la comprensión del uso de estos códigos:
- 0 - Sólo muestra el botón Aceptar
- 1 - Muestra los botones Aceptar y Cancelar
- 3 - Muestra los botones Sí, No y Cancelar
- 4 - Muestra los botones Sí y No
- 5 - Muestra los botones Reintentar y Cancelar
- 16 - Añade el icono Stop
- 32 - Añade el icono Interrogante
- 48 - Añade el icono Exclamación
- 64 - Añade el icono Información
- 128 - El primer botón es el predeterminado (También por defecto, sin necesidad de aplicar 128)
- 256 - El tercer botón es el predeterminado cuando hay tres; si hay dos es el segundo.
- 512 - El mismo funcionamiento que el código 256
Dado que estos códigos funcionan como números, tanto la expresión suma como su resultado tienen el mismo efecto. Por ejemplo, para mostrar un MsgBox con los botones Sí - No (código 4) y el icono Pregunta (código 32) con el botón No seleccionado (código 256) la expresión del tipo puede ser indistintamente 4 + 32 + 256 o 292
Interesa también plantearse un manejo diferente de estos parámetros (los tres) de MsgBox, ya que, especialmente el mensaje o texto que mostramos, pero no sólo él, es susceptible de ser tratado como variable y puede estar sometida a toma de decisión en función del algoritmo. Esto confiere a MsgBox() (y de ahí esta forma de presentarla, como una función) una funcionalidad mucho más dinámica y potente que la de ser mero recurso para la emisión de avisos (entonces la respresento como MsgBox).
Cuando empleamos MsgBox como mensaje, normalmente se presenta directamente, seguida del mensaje (MsgBox "Hola Mundo"), aunque es posible utilizar los parámetros propios de la función (MsgBox "Hola Mundo", 48, "SALUDO UNIVERSAL"). Pero cuando necesitamos capturar el valor del botón pulsado, necesitamos asignar dicho resultado a una variable (vRespuesta = MsgBox ("¿Es martes?",4,"DÍA DE LA SEMANA"). En este caso MsgBox() queda subsumida e integrada en la estructura decisional del algoritmo.
Muestro a continuación un ejemplo:
Dim iRpt As Single, i As Single
Dim mTratm(2) As String
iRespuesta =MsgBox("¿Es niño?,4,"DATOS DEL ALUMNO")
MsgBox iRespuesta
If iRespuesta = 6 Then
mTratm() = Array ("niño","alumno","el")
ElseIf iRespuesta = 7 Then
mTratm() = Array ("niña","alumna","la")
End If
For i = LBound( mTratm() ) To UBound(mTratm())
mTratm(i)
Next
MsgBox mTratm(2) & " " & mTratm(0) & " es " & mTratm(1) & "..."
Analizo el script:
- Las variables
iRespuestaeitienen que ser números enteros; la primera por razones obvias (MsgBox()> devuelve un valor numérico) y la segunda por su función como contador en el bucleFor. Además las categorizo comoSingledado que esos números son enteros pequeños, pero lo frecuente es declararlas comoInteger - La matriz
mTratmcumple aquí la función de resultado de la bifurcación y podría ser sustituida por un conjunto de variables, no necesariamente de tipoString. Su peculiaridad viene dada por los objetivos que se persigan con el script, que en este caso es definir el tratamiento gramatical en función del género (MsgBox mTratm(2) & " " & mTratm(0) & " es " & mTratm(1) & "...") - Mediante la expresión iRespuesta =MsgBox("¿Es niño?,4,"DATOS DEL ALUMNO") basada en la función
MsgBox()se asigna a la variableiRespuestael valor numérico resultante de la pulsación de los comandos "Sí-No" que se indican como segundo parámetro de la función. Los otros dos son el mensaje y el título deMsgBox()tal como se muestra en pantalla. - En la línea siguiente (
MsgBox iRespuesta) se usa MsgBox con funciones meramente informativas (mostrar el resultado de la función anterior). Es una línea de código que en la versión final del script se puede eliminar o comentar, una vez comprobado el correcto funcionamiento del script. - Sigue una estructura condicional (
If... ElseIf...End If) que bifurca el script en términos de expresiones gramaticales de género, dando contenido (mediante el array) a la matrizmTratm()(ej.mTratm() = Array ("niño","alumno","el")) en función del valor que devuelve el botón pulsado por el usuario (Sí -> 6, No -> 7) - Sigue un bucle
Forcuya función es también meramente informativa, por lo que es prescindible en la versión final de este script. Mediante este bucle recorremos los elementos de la matriz para comprobar que los valores asignados son correctos. - Y finalmente aplicamos el resultado del proceso anterior a la composición de un texto mediante concatenación de
Stringy de los elementos de la matrizmTratm(). El MsgBox que nos muestra en pantalla este texto es un ejemplo de su función output.
Se espera del lector que analice y pruebe este script y sea capaz de idear el suyo propio.
Notas
1 Esta entrada sustituye las creadas con fecha 16 de julio de 2023 sobre MsgBox como recurso de Input y de Output
2 Además de MsgBox e incluso más simple aun, en OOo Basic también podemos usar la instrucción Print (Print("Texto")) aunque es una instrucción que se emplea muy poco, salvo para comprobar el funcionamiento del código durante su creación.
3 Además de los números (ver en el texto de la entrada), también podemos emplear expresiones alfanuméricas como las que se indican en la página de ayuda de LibreOffice, si bien por simplicidad son preferibles la expresión numérica de los parámetros.
4 Este dato puede estar ausente y el orden puede variar sin que afecte al funcionamiento. Si en lugar de pulsar el comando se usa Intro como respuesta, el valor que devuelve la función será el de comando activo, que, en teoría, se define como sigue: 128 - 256 - 512 activan respectivamente los botones 1º, 2º y 3º. En la práctica he observado que 128 y 256 activan el primer botón y 512 el segundo.
No hay comentarios:
Publicar un comentario
Comenta esta entrada