Uso de cookies

Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continúa navegando, consideramos que acepta su uso. Para obtener más información o bien conocer cómo cambiar la configuración lea nuestra Política de cookies

Acceso a los controles de los diálogos


Un diálogo puede contener cualquier número de elementos de control (en adelante, controles). Podemos acceder a los controles mediante su nombre y con el método getControl':


Function Control( oDlg As Object, cNombre As String ) As Object
'--------------------------------------------------------------------------
   On Local Error GoTo Error_Control
   Control = oDlg.getControl( cNombre )
   Exit Function
 
Error_Control:
   MsgBox "El control " & cNombre & " no existe o error en el diálogo" & Chr(13) & Error, 144, "Error"
End Function


Veamos un ejemplo de como modificar la propiedad Text del control de tipo Label llamado Label1 de nuestro diálogo mediante este método:


Sub Main()
'--------------------------------------------------------------------------
   Dim oDlg As Object, nBoton As Integer
   Dim oCtrl As Object
 
   oDlg = DlgCrear( "Standard", "Dialog1" )
   oCtrl = Control( oDlg, "Label1" )
   oCtrl.Text = "Selecciona uno de la lista"
   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


Este es el resultado:


Dialogos-basic-macro-openoffice-004.png


Señal Nota.png

Los nombres de los controles son sensibles al uso de mayúsculas / minúsculas

Si el control se llama Label1 no puede utilizarse el nombre label1 para identificarlo


Trabajando con el contenido (Model) de los diálogos y controles

Es frecuente en la API 1 de Apache OpenOffice encontrarse con que los elementos visibles del programa (View) y los datos o documentos que hay detrás de ellos (Model) se separan en estos dos objetos para el acceso a sus propiedades.


En consecuencia, tanto el diálogo como los controles además de sus métodos y de sus propiedades inherentes, disponen de la propiedad Model que es en realidad un objeto subordinado, y que permite el acceso directo al contenido de un diálogo o de sus controles.


En los diálogos la distinción entre los datos (Model) y su representación (View) no siempre está tan clara como en otras áreas de la API.


Los elementos de la API están disponibles a través de ambas propiedades.


Cada tipo de control presentará unas propiedades y métodos distintos a través de su propiedad Model.


La siguiente función permite acceder a la capa Model de un control por su nombre:


Function Model( oDlg As Object, cNombre As String ) As Object
'--------------------------------------------------------------------------
   On Local Error GoTo Error_Model
   Model = oDlg.getControl( cNombre ).Model
   Exit Function
 
Error_Model:
   MsgBox "El control " & cNombre & " no existe o error en el diálogo" & Chr(13) & Error, 144, "Error"
End Function


El siguiente ejemplo muestra como configurar los datos de un objeto ListBox llamado ListaOrg presente en nuestro formulario a través de la propiedad Model:


Sub Main()
'--------------------------------------------------------------------------
   Dim oDlg As Object, nBoton As Integer
   Dim oCtrl As Object, oModel As Object
 
   oDlg = DlgCrear( "Standard", "Dialog1" )
   oCtrl = Control( oDlg, "Label1" )
   oCtrl.Text = "Selecciona uno de la lista"
 
   oModel = Model( oDlg, "ListaOrg" )
   With oModel
      .StringItemList = Array( "Opción A", "Opción B", "Opción C", "Opción D", "Opción E" )
      .FontHeight = 14
      .BackgroundColor=RGB(255,255,195)
      .HelpText = "Selecciona un elemento de la lista para guardarlo"
      .SelectedItems = Array(3)
   End With
 
   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


A través de la propiedad Model podemos acceder a las propiedades StringItemList, FontHeight, BackgroundColor, HelpText y SelectedItems que nos permiten configurar tanto los datos contenidos como el aspecto del control ListaOrg.


Este es el aspecto que muestra el diálogo al ejecutar el código:


Dialogos-basic-macro-openoffice-005.png


Algunas de las propiedades a las que se puede acceder a través del objeto Model son:


Propiedad Tipo Descripción

Name

String Nombre del control

Title

String Título de la ventana diálogo (esta propiedad sólo se aplica a los diálogos)

Height

Long Alto del control (en unidades ma)

Width

Long Ancho del control (en unidades ma)

PositionX

Long Posición en el eje de las X del control, medida desde el borde interior izquierdo del diálogo (en unidades ma)

PositionY

Long Posición en el eje de las Y del control, medida desde el borde interior superior del diálogo (en unidades ma)


Para asegurarse de que los cuadros de diálogo se mostrarán igual independientemente de la plataforma en la que se ejecuten (Windows, Linux, MacOs, etc.) Apache OpenOffice utiliza las unidades ma 2 o Map AppFont como unidades internas a la hora de especificar la posición y el tamaño tanto de diálogos como de controles.


Una unidad ma se define como un octavo de la altura media de un carácter de la fuente de sistema definida para el sistema operativo, y una cuarta parte de su anchura.


Si deseas cambiar el tamaño o la posición de los controles en tiempo de ejecución, determina el tamaño total del diálogo y ajusta los valores de los controles en sus proporciones correspondientes.


Foco y orden de tabulación

Pulsando la tecla Tab se puede navegar por los controles de un diálogo; en este contexto, disponemos de las siguientes propiedades a través del objeto Model:

En el siguiente ejemplo, a nuestro diálogo le hemos añadido un control CheckBox; en el código, establecemos el título que muestra el diálogo, el control ListaOrg pasa a ser el elemento 0 en el orden de tabulación, y el control ChkDobleCopia se desactiva y se elimina del orden de tabulación:


Propiedad Tipo Descripción

Enabled

Boolean Activa (True) o desactiva (False) el control. Si el control está desactivado no puede tomar el foco y por lo tanto el usuario no puede editarlo.

Tabstop

Boolean Activa (True) o desactiva (False) el salto al control mediante la tecla Tab. Si se desactiva, al pulsar la tecla Tab el control nunca toma el foco, por lo que el usuario sólo puede editarlo haciendo clic sobre el mismo.

TabIndex

Long Posición del control en el orden de activación mediante la tecla Tab.

getFocus

El control recibe el foco (sólo para diálogos)


En el siguiente ejemplo, a nuestro diálogo le hemos añadido un control CheckBox; en el código, establecemos el título que muestra el diálogo, el control ListaOrg pasa a ser el elemento 0 en el orden de tabulación, y el control ChkDobleCopia se desactiva y se elimina del orden de tabulación:


Sub Main()
'--------------------------------------------------------------------------
   Dim oDlg As Object, nBoton As Integer
   Dim oCtrl As Object, oModel As Object
 
   oDlg = DlgCrear( "Standard", "Dialog1" )
   oDlg.Model.Title = "Copias de seguridad de clientes"
 
   oCtrl = Control( oDlg, "Label1" )
   oCtrl.Text = "Selecciona uno de la lista"
 
   oModel = Model( oDlg, "ListaOrg" )
   With oModel
      .StringItemList = Array( "Opción A", "Opción B", "Opción C", "Opción D", "Opción E" )
      .FontHeight = 14
      .BackgroundColor=RGB(255,255,195)
      .HelpText = "Selecciona un elemento de la lista para guardarlo"
      .SelectedItems = Array(3)
      .TabIndex(0)
   End With
 
   oModel = Model( oDlg, "ChkDobleCopia" )
   oModel.TabStop = False
   oModel.Enabled = False
 
   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


El resultado al ejecutar el código es el siguiente:


Dialogos-basic-macro-openoffice-006.png


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.


Notas

1 Aplication Programming Interface (API) es un conjunto de objetos, propiedades, métodos, interfaces y enumeraciones que permiten a los programadores acceder a los elementos que conforman los documentos de la suite independientemente del lenguaje de programación utilizado (C++, Java, Python, StarBasic, ...)
2 El Map AppFont (ma) sustituye a la unidad Twips para lograr una mejor independencia de la plataforma


Modificada el 27 may 2015 03:58.   Visitas: 3360