lunes, 17 de julio de 2023

OOo Basic. Interface

InputBox

Aunque MsgBox() puede funcionar también como función como recurso para el input ([ver entrada]), es la función InputBox() el recurso especialmente pensado para este objetivo, definiéndose necesariamente como función, por lo que siempre se asocia a una variable, en este caso y en principio de tipo String.



InputBox permite al usuario interactuar con el script, aportando los datos que necesarios para (por ejemplo) personalizar el contenido del documento y la información necesaria para el correcto funcionamiento del script. Constituye, por ello, una forma sencilla de GUI en sentido estricto. Una interface sencilla y limitada, pero una forma básica de interface muy funcional.


Es además monótona ya que no presenta la variedad de opciones que tienen los controles de un formulario o de un cuadro de diálogo, pero lo compensa con la facilidad con que se implementa.

Lo de limitado es consecuencia de que todas las entradas son originariamente cadenas de caracteres (String) por lo que, en principio se debe asociar a una variable de tipo String. Pero dado que es posible realizar conversiones del tipo de variable mediante [las funciones que ya conocemos], podemos aplicar estas funciones previamente a InputBox()  para asociarlo a una variable no String.

La forma básica en la que se presenta InputBox()...

vNombre = InputBox("¿Cómo te llamas?")

... pasaría a ser para el caso de la edad (valor numérico)...

vEdad = CInt(InputBox("¿Cuántos años tienes?)) 

... para Dim vNombre As String y Dim vEdad As Integer.

Recuerda que las funciones de conversión en OOo Basic son las siguientes:

  • CStr() -> Conversión a string
  • CInt() -> Conversión a Integer
  • CVar() -> Conversión a Variant
  • CBool() -> Conversión a Boolean
La sintaxis completa de InputBox() es la siguiente...

InputBox (Prompt As String[, Title As String[, Default As String[, xpostwips As Integer, ypostwips As Integer]]]) As String

... aunque su uso más frecuente es más sencillo, omitiendo los parámetros de posicionamiento en pantalla, por ejemplo (1)

sNombre = InputBox("Dime tu nombre","NOMBRE DE USUARIO","Casimiro",6000,5000)

Primero asignamos a la variable sNombre (String) la respuesta dada (o confirmada) por el usuario. La sintaxis del InputBox() se describe como sigue:

  • Primer parámetro (Prompt) -> "Dime tu nombre", permite especificar la información o dato que se solicita al usuario.
  • Segundo parámetro (Title) -> "NOMBRE DE USUARIO", establece el título del InputBox().
  • A partir de aquí, el resto de los parámetros son opcionales
  • Tercer parámetro (Default) -> "Casimiro", establece una respuesta por defecto. Si se establece este parámetro opcional y el usuario no lo modifica, se considera que lo confirma. Este parámetro se usa para facilitar la entrada de datos cuando existe una respuesta predominante, pero también puede servir para ofrecer varias respuestas posibles y que sea el usuario quien elimine las que no corresponda.
  • Cuarto parámetro (xpostwips) -> 6000, posiciona el InputBox en el valor X 6000 de la pantalla (en pilxes)
  •  Quinto parámetro (ypostwips) -> 5000, posiciona el InputBox en el valor Y 5000 de la pantalla (en pilxes)

InputBox dispone de dos comandos (botones) invariables, Aceptar y Cancelar, el primero de ello seleccionado por defecto. Aceptar pasa el valor a la variable y Cancelar pasa una cadena vacía. En caso de pulsar Intro, el valor por defecto prevalece, por lo que equivale a pulsar Aceptar)(2).

sNombre = InputBox("Dime tu nombre","NOMBRE DE USUARIO","Casimiro",1200,1000)

print(sNombre) -> Devuelve Casimiro

Si lo que deseamos solicitar es un valor numérico (un Integer, por ejemplo), debemos utilizar la función de conversión CInt() aplicada bien a la variable string a la que asignamos el valor resultante de InputBox(), bien a la propia función, ya de que otro modo no se podrá operar con ese valor como numérico al ser éste se tipo String según la definición de InputBox() (InputBox() As String) (3)

Por si te interesa comprobar el funcionamiento de los script usados en esta entrada, en el IDE asociado a este documento tienes el código.

NOTAS

(1) Aunque lo más frecuente es omitir estos parámetros, puede ser interesante tenerlos en cuenta cuando ese posicionamiento sea de interés para el docap. Su principal inconveniente es que ese posicionamiento depende de la resolución del monitor y su tamaño, lo que afecta a la universalidad del código. Posiblemente esta sea la causa de su ausencia en la sintaxis de la función.

(2) Este comportamiento tiene su lógica (es el botón seleccionado por defecto) y sus ventajas: especialmente cuanto tenemos unos cuantos InputBox en el script, se agradece que la confirmación de los datos no dependa necesariamente de pulsar Aceptar; incluso ahorra unos cuanto posibles errores en la entrada de datos.

(3) En realidad el uso de la función de conversión CInt() sólo será imprescindible cuando insistimos en el tratamiento como String de las variables asociadas a InputBox(); en otro caso se realiza la conversión de forma implícita (y automática). No obstante, por claridad de escritura del algoritmo es conveniente respetar el procedimiento de conversión de tipología. Eso obliga a ser claros en lo que buscamos y evita posibles errores de funcionamiento del script. Este principio de actuación es válido para cualquier conversión de tipología de variables.

No hay comentarios:

Publicar un comentario

Comenta esta entrada