Formularios (b). Writer (1)
Dim oTxtNombre As ObjectDim sNombre As StringDim mDatos(6) As StringoTxtNombre = oForm.getByName("txtAlNombre")sNombre = oTxtNombre.TextmDatos(0) = oTxtNombre.Text
- Definido y caracterizado el funcionamiento de Cuadro de texto desde Propiedades del control, queda identificado por su Nombre (una de las opciones disponibles en Propiedades del control); por ejemplo "txtAlNombre" . Este nombre nos facilita una de las formas de acceso al control (oTxtNombre = oForm.getByName("txtAlNombre"))
- Previamente deberemos haber creado una variable tipo Object para capturar el objeto control deseado (Dim oTxtNombre As Object), ya que necesitamos esta variable para hacer posible el acceso al control y a su contenido.
- Tras acceder al control según la sintaxis ya expuesta (oTxtNombre = oForm.getByName("txtAlNombre")), la segunda fase del procedimiento consiste en acceder al contenido, necesariamente de tipo texto, dada la naturaleza de Cuadro de texto. Esto nos obliga a declarar previamente una variable tipo String o una matriz del mismo tipo (Dim sNombre As String y Dim mDatos(6) As String en nuestro caso) (4), a la que asignar el contenido del control.
- Esta asignación se realiza mediante la siguiente instrucción. En ella oTxtNombre contiene el objeto Cuadro de texto y a través del objeto accedemos a su atributo Text, que es el que contiene a su vez el texto que el usuario ha introducido en Cuadro de texto, cadena alfanumérica que pasa a ser referenciada en la variable sNombre
sNombre = oTxtNombre.Text
Dim oCurso As Object, oCursoVista As ObjectDim sCurso As StringDim mDatos(6) As StringoCurso = oForm.getByName("curso")oCursoVista = ThisComponent.getCurrentController.getControl( oCurso )sCurso = oCursoVista.getSelectedItem()mDatos(2) = oCursoVista.getSelectedItem()
- Para acceder al Cuadro de lista necesitamos dos variables Object.
- La primera (oCurso) nos permite acceder al control como tal (oCurso = oForm.getByName("curso"))
- y la segunda (oCursoVista) a su listado de opciones (oCursoVista = ThisComponent.getCurrentController.getControl( oCurso ))
- Posteriormente asignamos la opción seleccionada (método getSelectedItem()) a una variable String, previamente declarada (Dim sCurso As String) haciendo uso de ese método (sCurso = oCursoVista.getSelectedItem()) (5)
Este documento no tiene más función que la de ejemplificar el funcionamiento de las casillas y botones y de mostrar el modo de acceder a su contenidos mediante script OOo Basic.
NOTAS
(1) Al igual que la [entrada que la precede], ésta sustituye e incluye el contenido de otras dos publicadas el día 8/07/2023. En ambas se analizaba el funcionamiento de un formulario creado sobre Writer y usado desde un script OOo Basic y el modo de acceso al contenido de sus controles.
(2) LibreOffice cuenta con un listado de controles de formulario mucho más amplio, pero estos cuatro cubren la mayoría de las necesidades que buscamos satisfacer con un formulario, de ahí que sean los de uso más frecuente y, por tanto, los que más interés tienen para la creación de un docap basado en Formulario.
(3) El manejo de Cuadro de texto requiere el mismo procedimiento de acceso que cualquier otro control de formulario, por lo que no es factible trabajar con él como con InputBox(). En términos de funcionalidad, Cuadro de texto permite opciones de configuración que no están disponibles en InputBox() (que en esto es muy limitado); destaco por su utilidad la posibilidad de configurarlo multirrenglón, además de los formatos de texto (incluido tamaño de letra). Estas opciones de configuración permiten un uso muchos más amigable y funcional como interface, si bien requiere un trabajo previo de configuración desde Propiedades del control.
(4) La doble asignación a variable + matriz es innecesaria, aunque aquí la empleamos por motivos didácticos. En la explicación que sigue a esta nota en el cuerpo de la entrada sólo se recoge una de las dos alternativas de asignación, pero en el script se emplean ambas. El uso de la doble asignación podría estar justificada en algunos casos, pero entonces sería más adecuado que la propia variable se asignara al elemento x de la matriz (sNombre = oTxtNombre.Text -> mDatos(0) = sNombre).
(5) Recuerda lo dicho en (4) respecto al tratamiento de la matriz mDatos(). Omito ahora comentar esta parte del script. Al contrario que en Cuadro de texto, en el que el acceso al control requería el uso de la propiedad Text del control (sNombre = oTxtNombre.Text), ahora el acceso a la opción seleccionada por el usuario se hace invocando los métodos .getCurrentController.getControl( oCurso) del objeto Cuadro de lista. Esto supone un procedimiento mucho más complejo que en caso del control Cuadro de texto o el control Campo de fecha, que sigue el mismo procedimiento:
oFecha = oForm.getByName("fecha")sFecha = oFecha.Text
(6) También en este caso deberemos tratar el valor devuelto mediante una estructura decisional (condicional If)