Fichas de Referencia L.O. Basic
Ficha nº 7.
Diálogos
Nivel: Avanzado
|
Esta ficha de referencia está bajo licencia de CreativeCommons BY-SA v3 (fr) o posterior.: https://creativecommons.org/licenses/by-sa/3.0/fr/ |
|
Este documento es una adaptación del documento original, en Francés, que se puede obtener en la Wiki de publicaciones de LibreOffice.
|
Versión |
Fecha |
Comentarios |
|
2.0 |
06/04/2021 |
Mise en forme |
|
2.0_ES |
15/09/2026 |
Traducción y cambio de formato para esta versión |
Somos como enanos a hombros de gigantes. Si alcanzamos a ver más cosas y más lejanas que ellos, no es por la perspicacia de nuestra visión, ni por nuestra grandeza, sino porque son ellos quienes nos elevan. (atribuido a Bernard de Chartres )
Mostrar un mensaje simple
Print "Hola a todo el mundo !" (utilizado para depurar)
La elección de Cancelar provoca la detención del programa y la apertura de la ventana del EDI
Mostrar un mensaje de Información
MsgBox("TextoMensaje"[, CódigoDiálogo[, "Título"]])
Puede usar un salto de linea Chr(10) o de párrafo Chr(13) en el texto del mensaje.
Figura 1: Mensajes sencillos

Mostrar un mensaje y leer la respuesta
Respuesta = MsgBox("TextoMensaje"[, CódigoDiálogo[, "Título"]]) donde:
Respuesta: devuelve un entero según la elección del usuario.
CódigoDiálogo: botones a mostrar + icono + botón predet. ej: (,3+32+256,) o lo mismo (,291,)
|
Botones a mostrar |
|
|
|
(0) Aceptar (1) Aceptar, Anular |
(2) Detener, Reintentar, Ignorar (3) Sí, No, Cancelar |
(4) Si, No (5) Reintentar, Cancelar |
|
Icono |
|
|
|
(0) ninguno (16) ▵ Alerta |
(32) Pregunta (48) Avertencia |
(64) i Información |
|
Botón predeterminado |
|
|
|
(0) primero |
(256) segundo |
(512) último |
|
Valores de retorno |
|
|
|
(1) Aceptar (2) Cancelar (3) Interrumpir |
(4) Reintentar (5) Ignorar |
(6) Si (7) No |
InputBox()
InputBox("Mensaje" [, "Título"[, "Valor predeterminado"]])
Devuelve una cadena de texto, si se cancela devuelve una cadena vacía.
Los tipos FilePicker y FolderPicker están relacionados con
Herramienas > Opciones > LibreOffice > General > Usar los diálogos de L.O.
Tipos de diálogo provistos por la API
|
Selección de archivo:FilePicker |
|
|
com.sun.star.ui.dialogs.FilePicker |
Según la configuración de LibreOffice |
|
com.sun.star.ui.dialogs.OfficeFilePicker |
Fuerza el estilo de LibreOffice. |
|
com.sun.star.ui.dialogs.SystemFilePicker |
Fuerza el estilo del S.O. |
|
Selección de directorio: FolderPicker |
|
|
com.sun.star.ui.dialogs.FolderPicker |
Según la configuración |
|
com.sun.star.ui.dialogs.OfficeFolderPicker |
Fuerza el estilo de LibreOffice. |
|
com.sun.star.ui.dialogs.SystemFolderPicker |
Fuerza el estilo del S.O. |
El Objeto FilePicker (o OfficeFilePicker o SystemFilePicker)
oFilePicker = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
|
AppendFilter() |
(2 argumentos.) appendFilter("NombreLiteral", "*.xyz") |
|
CurrentFilter |
El filtro predeterm., entre los filtros elegidos por AppendFilter |
|
DefaultName |
Nombre predeterm. para el archivo a guardar. |
|
DisplayDirectory |
El directorion inicial o elegido por el usuario. |
|
Execute |
Transfiere el flujo de ejecución al diálogo y provee de un codigo de |
|
Files(0) |
El archivo (en modo único archivo) |
|
getSelectedFiles() |
Array de los archivos seleccionados (en modo multiseleccion). |
|
initialize() |
Elección del tipo de diálogo (ver constantes de tipo). Dim FPType(0) As Integer |
|
MultiSelectionMode |
Permite (True) o desactiva (False) la selección de varios archivos. |
|
Title |
El título del diálogo. |
Constantes de tipos de FilePicker
com.sun.star.ui.dialogs.TemplateDescription.XXX:
|
FILEOPEN_SIMPLE |
0 |
Apertura simple. |
|
FILESAVE_SIMPLE |
1 |
Guardado simple. |
|
FILESAVE_AUTOEXTENSION_PASSWORD |
2 |
Guardado: extensión automática + contra. |
|
FILESAVE_AUTOEXTENSION_PASSWORD_FILTEROPTIONS |
3 |
Guardado: extensión automática + contraseña + opciones filtro. |
|
FILESAVE_AUTOEXTENSION_SELECTION |
4 |
Guardado: extensión automática + selec. |
|
FILESAVE_AUTOEXTENSION_TEMPLATE |
5 |
Guardado: extensión automática + lista «Plantillas». |
|
FILEOPEN_LINK_PREVIEW_IMAGE_TEMPLATE |
6 |
Apertura: inserción como enlace + previsualizar + plantilla. |
|
FILEOPEN_PLAY |
7 |
Apertura: reproducir. |
|
FILEOPEN_READONLY_VERSION |
8 |
Apertura: sólo lectura + versión. |
|
FILEOPEN_LINK_PREVIEW |
9 |
Apertura: inserción como enlace + previsualizar. |
|
FILESAVE_AUTOEXTENSION |
10 |
Guardado: extensión autom. |
|
FILEOPEN_PREVIEW |
11 |
Apertura: previsualizar. |
|
FILEOPEN_LINK_PLAY |
12 |
Apertura: inserción como enlace + reproducir. |
Códigos de retorno
com.sun.star.ui.dialogs.ExecutableDialogResults.XXX
|
CANCEL |
0 |
Cancelar |
OK |
1 |
Aceptar |
El objeto FolderPicker (u OfficeFolderPicker o SystemFolderPicker)
oFldrPicker = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
|
Description |
Texto de ayuda (sobre el diálogo, en un OfficeFolderPicker, no se ve). |
|
DisplayDirectory |
Directorio inicial. (Si no se indica, posible Usuario> Documentos) |
|
Execute |
Transfiere el foco al diálogo y provee de un codigo de retorno. |
|
Title |
El título del diálogo. |
|
Directory |
Elegido por el usuario |
Abrir un único archivo (FilePicker)
El ejemplo crea un FilePicker con el tipo predeterminado (FILEOPEN_READONLY_VERSION), inicia el diálogo (propiedades y métodos), lo ejecuta. Lee la respuesta del usuario mediante las propiedades CurrentFilter, DisplayDirectory y Files (array)
> (Files(0) sólo contiene un valor.
Dim oFilePicker As Object, FPTipo(0) As Integer
Dim NombreArchivo As Variant, DirInicio As String
FPTipo(0) = 8 'Con opción solo lectura
NombreArchivo = ""
DirInicio = ""
'Iniciación del diálogo FilePicker
oFilePicker = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
oFilePicker.Initialize(FPTipo())
oFilePicker.DisplayDirectory = DirInicio
oFilePicker.appendFilter("Hojas de cálculo", "*.ods")
oFilePicker.CurrentFilter = "Hojas de cálculo"
oFilePicker.Title = "Elige la hoja de cálculo"
'Ejecución y verificación del código de retorno (OK)
If oFilePicker.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
' También su puede usar el código retorno: If oFilePicker.execute = 1 Then
NombreArchivo = oFilePicker.Files(0) 'resultado (único archivo)
Msgbox ("Ha elegido "& Chr(10) & NombreArchivo,0+64+0,"Elección")
End If
Abrir varios archivos (FilePicker)
Como lo anterior, Iniciar (en modo múltiple oFilePicker.MultiSelectionMode = True y el resultado (un array) se obtiene con oFilePicker.getSelectedFiles() que devuelve la selección efectuada por el usuario.
Guardar un archivo (FilePicker)
Como lo anterior, Iniciar en modo guardar FPTipo(0) = FILESAVE_XXX y el retorno con un único archivo oFilePicker.Files(0).
Elegir un directorio (FolderPicker)
Crear un FolderPicker, iniciarlo (propiedades y métodos indicados), el retorno (lectura de la elección del usuario) se da en oFoldP.Directory.
Dim oFoldP As Object, NombreDir As String
NombreDir = ""
oFoldP = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
oFoldP.DisplayDirectory = ConvertToURL("C:\Ruta\al\Directorio")
oFoldP.Description = "Seleccione un directorio"
oFoldP.Title = "Elige el directorio de backup"
If oFoldP.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
NombreDir = oFoldP.Directory
Msgbox "Directorio Destino = " & NombreDir
End If
Diálogo Basic = un módulo Diálogo (diseño) + (al menos) un módulo de código
Secuencia de ejecución de un diálogo
Figura 2: Secuencia de ejecución de un diálogo

La secuencia de ejecución se muestra en el gráfico:
Creación del diálogo en respuesta a un suceso de la aplicación
Iniciación de los controles desde el contexto de aplicación
Ejecución el diálogo que recibe el flujo de la ejecución
Se muestra en pantalla,
Gestión de los sucesos de los controles del diálogo
Los sucesos provocan el cierre del diálogo (Aceptar, cancelar);
Finalización hacia el contexto aplicativo si es preciso (operaciones)
Destrucción del diálogo y devuelve código a la macro que hace la llamada
Creación, iniciación, ejecución, finalización por nuestro código.
Presentación, cierre: operaciones automáticas consecutivas a las precedentes
Prevenga las respuestas a los sucesos de los controles ( Guía ref. n.o 4).
Carga de las bibliotecas de diálogos
Si usa mucho código o varios diálogos, piense en utilizar bibliotecas dedicadas, una por diálogo.
Las bibliotecas de diálogos no se cargan nunca automáticamente.
Los nombres de las bibliotecas son sensibles a las Mayúsculas !
Modal frente a No modal
|
Modal |
Un diálogo modal toma el control total del teclado, ratón y pantalla en espera de una acción del usuario, la aplicación permanece inaccesible
|
|
No modal |
Un diálogo no modal no bloquea el acceso a la aplicación. Ej.: el diálogo Buscar y reemplazar de LibreOffice
|
Tenemos un módulo de diálogo MiDlg y un módulo de código MiCodigoDlg en la biblioteca MiLibDlg. En una subrutina del módulo de código se crea una instancia de un objeto diálogo (oDlg) a partir del diálogo.
Creación/carga en memoria
DialogLibraries.loadLibrary("MilibDlg")
oLib = DialogLibraries.getByName("MiLibDlg")
oModulo = oLib.getByName("MiDlg")
oDlg = CreateUnoDialog(oModulo)
'y ahora se puede manipular oDlg
Sólo Llamada
|
oDlg.execute |
|
Llamada y comprobación del retono
If oDlg.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then …
El flujo del ejecución se transfiere al diálogo y el valor de retorno comprobado (¿Ha pulsado el usuario el botón Aceptar?).
Finalización / destrucción del diálogo
oDlg.dispose
Ejemplo recapitulativo (módulo de código)
Sub MostrarDialogo()
Dim oLib As Object, oModulo As Object, oDlg As Object
DialogLibraries.loadLibrary("MiLibDlg")
oLib = DialogLibraries.getByName("MiLibDlg")
oModulo = oLib.getByName("MiDlg")
oDlg = CreateUnoDialog(oModulo)
'IniciarDlg() 'initializar el contenido del diálogo
If oDlg.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
'FinalizarDlg() 'Hacer algo con los datos obtenidos
End If
oDlg.dispose
End Sub
Tenemos un módulo de diálogo MiDlgNM y un módulo de código MiCodigoDlgNM en la biblioteca MiLibDlgNM. En una subrutina del módulo de código se crea una instancia de un objeto diálogo (oDlg) a partir del diálogo.
Aplicar los mismos principios que antes con las sustituciones:
La presentación del diálogo se asegura con oDlg.SetVisible(True) en lugar de oDlg.execute,
Dos variables globales booleanas de control:
gCorriendo (impide las ejecuciones múltiples).
gMostrar controla la presencia del diálogo en la pantalla
las respuestas a los eventos (controles) ponen gMostrar a Falso cierre diálogo.
Presentación del diálogo
|
oDlg.SetVisible(True) |
|
Ejemplo recapitulativo (módulo de código)
'Control presentación del diálogo, declarado al inicio del módulo!
Dim gMostrar As Boolean
'control de ejecuciones múltiples no deseadas también al inicio
Dim gCorriendo As Boolean
Sub MostrarDialogoNoModal() 'gestiona creacción y presentación. del diálogo
Dim oBibli As Object, oModulo As Object, oDlg As Object
'évitar ejecuciones múltiples
If Not gCorriendo Then
gCorriendo = True : gMostrar = True
DialogLibraries.loadLibrary("MiLibDlgNM")
oBibli = DialogLibraries.getByName("MiLibDlgNM")
oModulo = oLib.getByName("MiDlgNM")
oDlg = CreateUnoDialog(oModulo)
'IniciarDlg() 'iniciar el contenido del diálogo
'Mostrar el diálogo mientras que gMostrar sea True
Do While gMostrar = True
Wait 20 'permite la ejecución de otros programas
oDlg.SetVisible(True) 'mantenerlo en pantalla
Loop
'FinalizarDlg() 'hacer algo con los datos obtenidos si es preciso
oDlg.dispose
gCorriendo = False
End If
End Sub 'MostrarDialogoNoModal
Sub AlPulsarAceptar(ByRef pEvt As Object)
' Instrucciones tras la Réspuesta a un clic en Aceptar
'realizar las acciones necesarias y 'Finalizar con :
gMostrar = False '=> fin del bucle while y por consiguiente cierre del diálogo
End Sub 'OnBtnOKClick
Nuestro diálogo se comunica con la aplicación a través de los sucesos ( del esquema). Habrá que crear entonces las macros que respondan a los sucesos (extracto de Guía ref. n.o 4):
Sub NombreDeLaMacro()
End Sub
El nombre de la macro se relaciona con el objeto, acción y el tipo de suceso.
ejemplo: Sub AlPulsarAceptar()
seleccionamos el objeto que va a interceptar el evento.
Accedemos a su configuración (método variable según el objeto),
elegimos el suceso a interceptar,
Asignamos la macro a ejecutar en el desplegable del suceso (punto 1.).
Más informaciones sobre los eventos en el Guía ref. n.° 4.
Obtener informaciones sobre el evento desencadenante
La macro de procesamiento puede consultar el parámetro que recibe para obtener las informaciones complementarias sobre el evento:
Sub RespuestaEvento(ByRef Evento As Object)
End Sub
La estructura y las propiedades del objeto Evento dependerán del tipo de evento que desencadene la llamada al procedimiento
Información de los controles
|
Para acceder a |
Consulta |
|
(Objeto) control que hace la llamada |
Event.Source |
|
(Objeto) modelo del control |
Event.Source.Model |
|
(Objeto) diálogo contenedor del control |
Event.Source.Context |
Iniciación
( en el esquema) El diálogo necesita a menudo informaciones procedentes del contexto de ejecución. La macro de iniciación configura el diálogo a partir de sus datos.
Finalización
( en el esquema) Este proceso implica realizar la operación inversa a la anterior: actualizar los datos contextuales a partir de los ingresados o elegidos en el diálogo
LibreOffice gestiona los módulos de diálogo independientemente del código (Guía de referencia. n.o 1). Es posible copiar estos objetos de un documento a otro.
Copiar un módulo de diálogo de una biblioteca a otra
(en el mismo documento o entre documentos / contenedores)
En el IDE, abrimos los dos documentos/contenedores origen y destino.
Abrimos el Organizador de macros (botón
), pestaña Diálogos, arrastramos y soltamos desde el origen al destino.
De manera predeterminada, los diálogos se mueven, para copiarlos pulse Ctrl al desplazarlos.
Guardar una copia de un módulo de diálogo
En el IDE, abrimos el módulo Diálogo que queremos guardar.
Pulsamos el botón
Exportar diálogo en la barra de herramientas.
Asignamos un nombre al archivo y lo guardamos.
El documento se guarda en formato XML y con la extensión .xdl.