Revisión a fecha de 02:46 27 may 2015; Salva (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)

Diálogos OpenOffice Basic

Los documentos de Apache OpenOffice (documentos de texto, libros de hojas de cálculo, presentaciones, bases de datos...) permiten que se les agreguen diálogos y formularios. Estos a su vez pueden estar vinculados a las macros de OOoBasic para ampliar considerablemente las posibilidades de uso de la suite.


Mediante los diálogos podemos, por ejemplo, mostrar información de la base de datos o guiar a los usuarios a través de un proceso paso a paso para crear un nuevo documento, de la misma forma que lo hace un asistente.



Trabajando con diálogos

Los diálogos básicos consisten en una ventana emergente que puede contener campos de texto, cuadros de lista, botones, botones de radio, casillas de selección, imágenes y otros elementos de control (genéricamente denominados controles).

Para crear diálogos utilizamos el editor de diálogos de Apache OpenOffice.


El editor de diálogos nos permite:

  • Crear y estructurar los diálogos
  • Arrastrar los elementos de control de la plataforma de diseño (a la derecha) al área de diálogo, y definir su posición y tamaño.


Dialogos-basic-macro-openoffice-001.png


El ejemplo muestra un cuadro de diálogo que contiene una etiqueta, un cuadro de lista, dos botones y una imagen.


Dialogos-basic-macro-openoffice-002.png


Podemos crear un cuadro de diálogo creado con el editor de diálogos con el siguiente código:


Function DlgCrear( cNomLibreria As String, cNomDlg As String ) As Object
'--------------------------------------------------------------------------
   On Local Error GoTo Error_DlgAbrir
   Dim Dlg As Object
   If DialogLibraries.HasByName(cNomLibreria) Then
      DialogLibraries.LoadLibrary(cNomLibreria)
      oDlg = CreateUNODialog(DialogLibraries.Standard.GetByName(cNomDlg))
      DlgCrear = oDlg
   Else
      MsgBox "La librería " &  cNomLibreria & " no existe", 144, "Error"
   EndIf
   Exit Function
 
Error_DlgAbrir:
   MsgBox "Error al abrir el diálogo " & cNomDlg & Chr(13) & Error, 144, "Error"
End Function


El diálogo abierto se puede cerrar con este código


Sub DlgCerrar( oDlg As Object )
'--------------------------------------------------------------------------
   On Local Error GoTo Error_DlgCerrar
   oDlg.Dispose()
   Exit Sub
 
Error_DlgCerrar:
   MsgBox "Error al cerrar el diálogo" & Chr(13) & Error, 144, "Error"
End Sub


Para mostrar el diálogo utilizaremos el método Execute; este es un ejemplo del uso de las dos funciones combinadas para mostrar el diálogo Dialog1 creado con el editor de diálogos:


Sub Main()
'--------------------------------------------------------------------------
   Dim oDlg As Object
   oDlg = DlgCrear( "Standard", "Dialog1" )
   oDlg.Execute()
   DlgCerrar oDlg
End Sub


Y este es el resultado de ejecutar el código:


Dialogos-basic-macro-openoffice-003.png


El método CreateUnoDialog crea un objeto llamado oDlg que hace referencia al diálogo asociado. Antes de abrir el diálogo es necesario asegurarse que la librería que lo contiene (en nuestro caso la librería Standard) existe y está cargada en memoria, para lo que utilizamos los métodos HasByName y LoadLibrary del objeto DialogLibraries.


Una vez que el diálogo ha sido inicializado puede ejecutarse (mostrarse) mediante el método Execute; el diálogo se muestra en forma modal, lo que significa que toma el foco de atención de la aplicación y no permite trabajar en la misma hasta que cerremos el diálogo.


Durante todo el tiempo en que el diálogo permanece abierto, el programa permanece en la llamada Execute. Cuando se cierra el diálogo se ejecuta la siguiente instrucción, en nuestro ejemplo, la que elimina el diálogo (descarga el diálogo de la memoria, dejando ésta libre) mediante el método Dispose.


Cerrar el diálogo con Aceptar o Cancelar

Si un diálogo posee los botones Aceptar y Cancelar, y estos han sido definidos con su propiedad Tipo de botón Aceptar y Cancelar, respectivamente, al hacer clic sobre alguno de ellos el diálogo se cierra. Podemos detectar sobre qué botón hizo clic el usuario a través del método Execute, ya que si se pulsó el botón Aceptar devuelve un 1, y un 0 en caso contrario.


Sub Main()
'--------------------------------------------------------------------------
   Dim oDlg As Object, nBoton As Integer
   oDlg = DlgCrear( "Standard", "Dialog1" )
   nBoton = oDlg.Execute()
   If nBoton = 1 Then
      MsgBox ("Se ha pulsado el botón Aceptar", 192, "Información")
   Else
      MsgBox ("Se ha pulsado el botón Cancelar", 192, "Información")
   EndIf
   DlgCerrar oDlg
End Sub


Cerrar el diálogo con el botón Cerrar de la barra de título

Si se cierra el diálogo con el botón Cerrar de la barra de título, el valor devuelto por el método Execute es 0, el mismo que cuando se cierra mediante el botón Cancelar


Cerrar el diálogo desde una llamada del programa

Si deseamos cerrar el diálogo desde una orden del programa podemos utilizar el método endExecute:


Sub DlgForzarCierre( oDlg As Object )
'--------------------------------------------------------------------------
   On Local Error GoTo Error_DlgForzarCierre
   oDlg.endExecute()
   Exit Sub
 
Error_DlgForzarCierre:
   MsgBox "Error al forzar el cierre del diálogo" & Chr(13) & Error, 144, "Error"
End Sub


El valor devuelto por el método Execute también es 0, el mismo que cuando se cierra mediante el botón Cancelar


Señal Nota.png

Puedes encontrar más información sobre diálogos y formularios en:


Señal CopyRight.png

Texto, imágenes y código bajo licencia CC BY-SA.png

Basado en el documento Getting Started with Base. Apache OpenOfficetm Database Component, de Drew Jensen Copyright 2013 liberado bajo licencia Apache Software License 2.0, que incluye material de:
  • OpenOffice.org 3.3 Getting Started Guide, Chapter 8 - Getting Started with Base, Copyright 2010 Dan Lewis, Iain Roberts, Magnus Adielsson, Jean Hollis Weber, JiHui Choi
  • OpenOffice.org 3.2 BASIC Guide · March 2010, Copyright Oracle Corp.


Modificada el 27 may 2015 02:46.   Visitas: 10 785