Macros/Draw/001/es
TDF LibreOffice Document Liberation Project Blogs comunitarios Weblate Nextcloud Redmine Ask LibreOffice Donar
Descripción
Contexto
Queremos poder mostrar u ocultar objetos haciendo clic en un botón.
La siguiente figura muestra un ejemplo en el que al hacer clic en uno de los botones con título "Squares" o "Circles" muestra o oculta los objetos respectivos (cuadrados o círculos).

Preparación
LibreOffice Draw permite la creación de capas en una página de Draw. El uso de capas nos permite acceder a objetos situados en una capa en particular. Piense en capas como diferentes espacios de trabajo disponibles que puede manejar individualmente, su visibilidad o si deben bloquearse o evitar su impresión etc. De manera predeterminada, Draw emplea tres capas (que se ven en la barra de pestañas inferior de la interfaz):
- Disposición
- Controles
- Líneas de dimensión
Crearemos dos capas más de manera manual para poder manejar objetos por capa:
- Los cuadrados se crearán en la capa llamada Squares.
- Los círculos se crearán en la capa llamada Circles.
Cada capa tiene una propiedad booleana llamada IsVisible. La macro alterna esta propiedad entre True y false para mostrala u ocultarla.
Una única macro se acciona por el suceso Ejecutar acción para cada botón. La variable oEvent se pasa como un argumento a la macro que se ejecuta cuando se hace clic en el botón. Esto se puede establecer creando un botón, haciendo clic con el botón derecho y seleccionando Propiedades de control, y finalmente en Sucesos puede seleccionar una macro para el elemento Ejecutar acción.
A partir de esto, podemos rastrear la Etiqueta del botón y hacer un buscar una capa con el mismo nombre. Otra opción es utilizar el Nombre del botón para comparar con el nombre de la capa.
El código también evita un posible error al verificar que el documento realmente tenga una capa con ese nombre mediante la propiedad HasbyName.
Código
LibreOffice Basic
Option Explicit
Sub toggle_layer_visibility (oEvent)
'''Asociada al suceso "Boton pulsado", alterna la visibilidad de la capa con el nombre que coincida con la "Etiqueta" del botón'''
Dim oLayerManager As Object ' com.sun.star.drawing.LayerManager
oLayerManager = ThisComponent.LayerManager
If oLayerManager.hasByName(oEvent.source.model.Label) Then
oLayerManager.getByName(oEvent.source.model.Label).IsVisible = _
Not( oLayerManager.getByName(oEvent.source.model.Label).IsVisible )
Else
MsgBox "No hay ninguna capa llamada " & _
CHR$(34) & oEvent.source.model.Label & CHR$(34), _
48, "toggle_layer_visibility()"
End If
End Sub ' toggle_layer_visibility
Archivo ODG
Notas
- Consulte la documentación de la API sobre el servicio com.sun.star.drawing.LayerManager.