Trabajando con cuadros de diálogo

From Apache OpenOffice Wiki
< ES‎ | Manuales‎ | GuiaAOO‎ | TemasAvanzados‎ | Macros‎ | Python
Jump to: navigation, search


Editing.png Esta página está en estado borrador.

Los cuadros de diálogo son similares a los formularios, se diferencian en que estos se muestran en una ventana independiente y los formularios están incrustados en la hoja de calculo, también, con los formularios se puede interactuar con las celdas y los controles directamente así como vincularlos, los cuadros de diálogo, al estar dentro de su ventana, es preciso cerrarla primero para regresar a la hoja de calculo, otra diferencia importante es que los formularios están más orientados a la interacción con orígenes de datos, pues cuentan con propiedades y características especiales para ello, los cuadros de diálogo son más de propósito general aunque con un poco de ingenio también los puedes poner a trabajar como si de una interfaz de datos se tratara. Los controles disponibles para los cuadros de diálogo son en su mayoría, los mismos que ya hemos visto en los formularios por lo que solo nos centraremos en las diferencias importantes.

# a continuación importamos el API completo
import uno

Debemos recordar que muchos de estos módulos están abstraídos dentro de Basic, sin embargo en Python esto es más explicito. Aquí vemos como se construye un dialogo desde el código de Python usando el UnoControlDialogModel e insertando las propiedades de ese dialogo. El método principal es la definición de visibilidad.

import uno
def miDialogo():
    ''' Creamos un dialogo en blanco usando la interfaz awt'''
    ctx = uno.getComponentContext()
    smgr = ctx.ServiceManager
    oDM = smgr.createInstance("com.sun.star.awt.UnoControlDialogModel")
    oDM.Width= 300   # importante en windows
    oDM.Height = 250 # importante en Windows
    oDialog = smgr.createInstance("com.sun.star.awt.UnoControlDialog")
    oDialog.setModel(oDM)
    oDialog.setVisible(True)
    oDialog.execute()

Notemos también que no se esta dependiendo de una librería prefabricada con un editor, como sucede cuando Basic importa la librería con el dialogo. Vease cuadro de dialogos en Starbasic.

Si quisieramos usar un dialogo hecho por el editor de Dialogos de OpenOffice, podríamos usar la interfaz de DialogProvider y el servicio de createDialog para acceder en este caso al Dialog1.

def miDialogo2(): 
  Doc = XSCRIPTCONTEXT.getDocument()  
  psm = uno.getComponentContext().ServiceManager 
  dp = psm.createInstance("com.sun.star.awt.DialogProvider") 
  dlg = dp.createDialog("vnd.sun.star.script:Standard.Dialog1?location=application")  
  dlg.execute()

Botón de comando

Control de gráfico (ImageControl)

Este control nos permite mostrar archivos de imagen, agrega uno al cuadro de diálogo desde la barra de herramientas y llámalo icFoto. Su propiedad más importante es la que nos permite establecer la imagen a mostrar.

...

Este control, usado en tiempo de ejecución, nos permite hacer cosas muy divertidas, como mostrar las fotos de tus contactos si estas haciendo una agenda, o la imagen de tus productos si tienes un inventario, solo por citar dos ejemplos.


Casilla de verificación (CheckBox)

Agrega un control y nómbralo chkImprimir, generalmente, este control se usa para valores de verdadero o falso, aunque tiene una propiedad para establecer hasta tres estados.

...

Observa como hacemos referencia al control de imagen agregado en nuestro ejemplo anterior y lo ocultamos. El estado triple de una casilla de verificación, te permite establecer tres estados a este control: seleccionado, no seleccionado y sin selección. Para recuperar su valor usamos.

...

Nota como recuperamos el valor del control sin mostrar el cuadro de diálogo, aunque lo usual es mostrar el cuadro de diálogo para que el usuario manipule los controles y entonces si, recuperar sus valores.

Cuadro de grupo (FrameControl)

Agrega un control cuadro de grupo y llámalo fraDistribucion. Este control nos permite agrupar a otros controles, excepto para los botones de opción donde si tienen inferencia, para los demás controles solo es estético, una ayuda visual para separar grupos de controles. Sus principales propiedades son.

...

Observa como vamos ocultado los controles anteriores usados, puedes seguir ocultando los que no usemos, por ahora, o puedes hacer más grande el cuadro de diálogo para que quepan más controles, queda a tu criterio. En el capítulo anterior, formularios, para agrupar y controlar los botones de opción, era suficiente con establecerles el mismo nombre por grupo, en los cuadros de diálogo, no es posible usar el mismo nombre para más de un control, por ello, en este caso, es importante el uso de cuadros de grupo, como lo demostraremos a continuación.

Boton de opción (OptionButton)

Agrega tres controles de botón de opción (OptionButton) y nómbralos optUbuntu, optFedora y optArch. Establece el segundo como seleccionado. Es muy importante que los agregues dentro del cuadro de grupo (FrameControl) creado en el tema anterior, de modo que tengas algo así.

Para acceder al botón de opción que este seleccionado, usamos.

...

Por supuesto, ya lo notaste, si mostramos el valor (State) de los botones de opción, antes de mostrar el cuadro de diálogo, siempre tendremos el mismo botón seleccionado, el que hayas establecido como predeterminado, para este ejemplo, por ahora, solo recuerda como obtenemos el estado (State), en el siguiente capítulo, aprenderemos una forma muy elegante de como consultar el estado de grupos de botones de opción, sin tener que acceder uno por uno. Cada grupo de botones de opción que agregues, formará un grupo al cual puedes acceder por su índice, como en.

...

Observa como devolvemos el grupo deseado, en este caso el cero, en la variable (oGrupo) pasada como argumento al método (getGroup), esta forma regresar un valor en uno de los argumentos de la función, es muy común en la programación en C, C++ y otros lenguajes, en los derivados de Basic no es muy común, pero como ves, se presenta algunas veces.

Etiqueta (Label)

Las etiquetas, a pesar de tener la capacidad de asociarles macros, son comúnmente usadas como controles estáticos, agrega una nueva etiqueta y llámala lblTitulo. Entre otras de sus propiedades, puedes cambiar en tiempo de ejecución, las siguientes.

...

En no pocas ocasiones, puedes usar una etiqueta para mostrar ayuda contextual al usuario de forma dinámica.

Campo de texto (TextField)

Agrega un control de cuadro de texto y llámalo txtNombre. Estos controles son los más comúnmente usados para que el usuario introduzca información a procesar.

...

Observa en el ejemplo que consultamos el valor del control, después de que se cierra el cuadro de diálogo, recuerda que esto puede ser correcto, siempre y cuando la información ya este validada, esto es muy importante. Este control comparte la mayoría de las propiedades vistas en los formularios, excepto la capacidad de mostrar texto enriquecido.

Cuadro de lista (ListBox)

Agrega un control de cuadro de lista y nómbralo lstPaises.

...

Todos los métodos vistos en el capitulo de formularios, con este control, aplican para su uso dentro de cuadros de diálogo.

Barra de desplazamiento (ScrollBar)

Agrega un control de barra de desplazamiento y llámalo sbMover.

...

En la barra de herramientas de controles, veras dos controles de este tipo, uno horizontal y otro vertical, en realidad es el mismo control, solo que su propiedad de orientación (Orientation) esta establecida en uno y otro valor, si cambias esta propiedad, debes de intercambiar, también, los valores de ancho y alto del control, esto es por que no se redimensiona automáticamente.

...

Las demás propiedades, son las mismas vistas en los formularios.

Barra de progreso (ProgressBar)

Agrega un control barra de progreso en nuestro cuadro de diálogo y llámalo pbAvance. Este control no esta presente en los formularios, por lo que veremos sus principales propiedades aquí.

...

Este control esta pensado para mostrar el avance (progreso) de una tarea al usuario, por ejemplo, las líneas importadas de un archivo, la exportación de información o cualquier otro proceso que tenga un inicio y un fin, es decir, que generalmente sepamos cuando empieza y cuando termina para poder mostrar el avance como en el siguiente ejemplo.

...

Antes de que te enojes conmigo con justa razón, te explico, aparentemente, no veras ningún efecto, salvo, si eres observador, que al mostrar el cuadro de diálogo, la barra de progreso se mostrará llena, solo quise mostrarte el uso común en un rutina para la barra de progreso, generalmente, los valores máximos y mínimos se ajustan en tiempo de ejecución para adaptarse al proceso que estamos procesando, y el valor actual de la barra (ProgressValue), es el que va cambiando con el tiempo, en el siguiente capitulo veremos más ejemplos de este control en usos más cotidianos. También, es frecuente que este control se muestre al usuario, solo, mientras muestra el avance, después, se oculta, claro, esto, es a tu gusto y criterio, aunque, como buen programador, antes del gusto, satisface las necesidades del usuario.

Línea (FixedLine)

Este control es solo cosmético, cierto, le puedes asignar macros a los eventos que soporta, pero no es usual, generalmente solo se agrega para separar controles o secciones dentro del cuadro de diálogo, agrega un control de línea y llámala linSepara. Este control tiene pocas propiedades.

...

Al igual que con las barras de desplazamiento, las líneas horizontales y verticales son el mismo control, solo cambia la propiedad orientación (Orientation), si cambias la orientación de la línea a vertical (), el texto (Label) no se mostrará y tienes que intercambiar el ancho por alto para mantener la proporción del control.

...

Al contar con texto para mostrar al usuario, este control cuenta con todas las propiedades propias de los controles con texto (fuente, tamaño, color, estilo, etc), por lo que puedes establecerlas también.

Control de archivo (Filecontrol)

Este control nos permite seleccionar la ruta y nombre de cualquier archivo, solo nos devolverá la ruta seleccionada por el usuario, teniendo que agregar cualquier código necesario para manipular dicho archivo. Agrega un control de archivo y llámalo fcArchivo

...

La ruta que establezcas en la propiedad texto (Text), será la ruta donde se abrirá el cuadro de diálogo de selección de archivo cuando el usuario presionar el botón Examinar... de este control, esta misma propiedad te sirve para recuperar la ruta de archivo seleccionado por el usuario, no obstante, siempre valida que el archivo exista.

Control de árbol (TreeControl)

Este control solo esta presente en los cuadros de diálogo, sirve para mostrar elementos jerarquizados, con la posibilidad de expandirse y contraerse. Agrega un nuevo control de árbol y llámalo tcDirectorios. Sus principales propiedades son.

...

El tipo de selección (SelectionType), determinará la forma de selección con el ratón o teclado, sus valores son: ninguno (0), sencillo (1), solo se selecciona un elemento, múltiple (2), se pueden seleccionar varios elementos, incluso alternados con apoyo de la tecla CTRL y rango (3) donde podemos arrastrar y seleccionar varios elementos.

Para agregar datos a este control, es necesario apoyarnos en otro servicio.

...

Al cerrar el cuadro de diálogo, te tiene que mostrar el nodo seleccionado, si no hay ningún nodo seleccionado, te dará un error, para evitarlo, primero consulta el número de selecciones que hay.

...

En siguiente ejemplo, a partir de la ruta especificada, buscaremos todos los directorios contenidos y los agregaremos como nodos.

...


Por supuesto, puedes hacer que se muestren tantos subdirectorios como quieras, en el siguiente capítulo resolveremos esta cuestión, pero puedes ir tratando de encontrar el ¿como?. A los nodos, también es posible agregarles una imagen, como en el siguiente ejemplo.

...

Este control cuenta con varios métodos más que nos permiten controlarlo completamente, pero estos métodos, los aprenderemos en el siguiente capítulo, donde aplicaremos todos los conocimientos vistos a los largo de este libro.

Otros contoles

Todos los siguientes controles, son muy similares, son cuadros de texto, con alguna característica especial para algún tipo de dato, sus propiedades son las mismas vistas en el capítulo de formularios, y la forma de acceder a ellos, es por su nombre, igual que con cualquier otro control dentro del cuadro de diálogo, como lo hemos venido practicando en este tema.


Estos controles son:

  • Campo de fecha (DateField)
  • Campo de hora (TimeField)
  • Campo numérico (NumericField)
  • Campo de moneda (CurrencyField)
  • Campo formateado (FormattedFiel)
  • Campo enmascarado (PatternField)


ES.Plantillas.Logo foro es.png
Si tienes dudas acerca de lo aquí explicado, tienes algún problema con AOO,
o quieres ampliar la información, no dudes en dirigirte al

Foro Oficial en español de Apache OpenOffice para Macros y API UNO

Personal tools