Jump to content

Macros/Draw/001/es

From The Document Foundation Wiki
This page is a translated version of the page Macros/Draw/001 and the translation is 100% complete.


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).

Mostrar/ocultar capas mediante botones.
Mostrar/ocultar capas mediante botones.

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