viernes, 23 de marzo de 2007

Poniendo en práctica OpenOffice.org Basic

OOoBasic cambia de rumbo: Agregando Bondades al GUI
Miércoles 21 de Marzo, 2007 (03:01 PM GMT)
Por: Dmitri Popov

Algunas macros de OpenOffice.org tienen cajas de diálogo rudimentarias que permiten definir pocos parámetros. Si estás listo para llevar tus habilidades de programación en macros a un nuevo nivel, puedes aprender como crear interfases gráficas para tus macros. Una vez que sepas como hacer esto, puedes construir macros avanzadas que se aproximen a completas aplicaciones.

Previamente, creamos una macro simple que te permita buscar la palabra seleccionada en referencias en línea. Mientras la macro es útil como lo es en esencia, tiene una seria desventaja: el usuario no puede interactuar con ésta, necesitas crear una rutina separada para cada referencia en línea. Esto significa que si deseas tener 10 referencias en línea, tienes que crear 10 macros diferentes donde la única diferencia es la URL (dirección Web) de las referencias en línea. Obviamente, una solución más eficiente sería una macro que permita a los usuarios seleccionar una referencia de una lista y luego escoger la URL apropiada.

OOoBasic mantiene macros y diálogos (los cuales actúan como los GUI de macros) separadamente, así que para tener las cosas ordenadas, comienza creando una nueva librería para una nueva macro de búsqueda y su diálogo. Para hacer esto, escoge Herramientas -> Macros -> Organizar Macros -> OpenOffice.org Basic, presionar el botón organizador, selecciona My Macros, y crear una nueva librería llamada GUI. Presionar el botón Editar para abrir el IDE de OOoBasic.

Antes que comiences escribiendo la macro actual, tienes que construir un diálogo. Para hacer esto, dale click derecho sobre la pestaña Module1 al final de la ventana y selecciona Insertar -> Diálogo Básico. Esto crea un nuevo diálogo y lo abre para editarlo. Usa las herramientas proporcionadas para crear un diálogo simple que contenga 3 elementos: un list box y OK y los botones de Cancelar. Has doble click en el list box y asegúrate que su nombre sea ListBox1. En las entradas de List, ingresa los nombres de las referencias que quieras para usarlas en la macro (por ejemplo “Wikipedia” "Cambridge Dictionary," y "Google Define"). Para ver como se ve en acción el diálogo creado, presiona el botón de Modo de Prueba.

Una vez que hayas terminado con el diálogo, puedes escribir la macro. Cambia a la pestaña Module1, y, como siempre, comienza definiendo variables:

Sub LookupWithGUI()

Dim Dialog As Object, Library As Object
Dim TheDialog As Object, DialogField As Object
Dim exitOK As String , CurrentItemPos As Integer

Necesitarás las variables Dialog, Library, TheDialog, y DialogField para unir la macro al diálogo creado, inícialo, y señala la macro a el campo correcto. La variable CurrentItemPos será usada para almacenar la posición del ítem seleccionado de la lista.

El próximo paso es especificar la URL de las referencias que quieras usar en la macro. Hay muchas maneras de hacer esto; en éste caso, usamos un arreglo simple para almacenar todas las URLs:

URLArray=Array("http://en.wikipedia.org/wiki/",_
"http://dictionary.cambridge.org/results.asp?searchword=",_
"http://www.google.com/search?q=define%3A")

Hemos usado el siguiente bloque de código en casi cada macro que hemos creado hasta ahora en ésta serie de artículos, así que casi no necesita más explicación:

ThisDoc=ThisComponent
LookupWord=ThisDoc.CurrentController.getViewCursor

El próximo paso es señalar la macro para el diálogo creado:

exitOK=com.sun.star.ui.dialogs.ExecutableDialogResults.OK
Library=DialogLibraries.GetByName("GUI")
TheDialog=Library.GetByName("Dialog1")

Como puedes ver, unir la macro al diálogo se realiza de manera directa: primero, la función DialogLibraries.GetByName() selecciona la librería apropiada (GUI, en este caso), luego la función Library.GetByName() recupera el nombre del diálogo (Diálog1). Una vez que la macro sabe que diálogo usar, debes iniciarlo y escoger el campo list Box:

Dialog=CreateUnoDialog(TheDialog)
DialogField=Dialog.GetControl("ListBox1")
DialogField.SelectItemPos(1, True)

Cuando el usuario selecciona un ítem de una lista y el da click en el botón OK, la macro obtiene la posición del ítem seleccionado:

If Dialog.Execute = exitOK Then
CurrentItemPos = DialogField.SelectedItemPos

Finalmente, la macro usa la posición para conseguir la correcta URL de la URLArray y lo envía al browser, luego, dispone de la ventana del diálogo:

Shell("C:\Program Files\Mozilla Firefox\firefox.exe",1, URLArray(CurrentItemPos) & LookupWord.String)
End If

Dialog.Dispose

End Sub

Y he aquí el resultado final:

Sub LookupWithGUI()

Dim Dialog As Object, Library As Object
Dim TheDialog As Object, DialogField As Object
Dim exitOK As String, CurrentItemPos As Integer

URLArray=Array("http://en.wikipedia.org/wiki/",_
"http://dictionary.cambridge.org/results.asp?searchword=",_
"http://www.google.com/search?q=define%3A")

ThisDoc=ThisComponent
LookupWord=ThisDoc.CurrentController.getViewCursor

exitOK=com.sun.star.ui.dialogs.ExecutableDialogResults.OK
Library=DialogLibraries.GetByName("GUI")
TheDialog=Library.GetByName("Dialog1")

Dialog=CreateUnoDialog(TheDialog)
DialogField=Dialog.GetControl("ListBox1")
DialogField.SelectItemPos(1, True)

If Dialog.Execute=exitOK Then
CurrentItemPos=DialogField.SelectedItemPos
Shell("C:\Program Files\Mozilla Firefox\firefox.exe",1, URLArray(CurrentItemPos) & LookupWord.String)
End If

Dialog.Dispose

End Sub

Con esta versión de macro, no tienes que escribir una nueva rutina para cada referencia en línea de la macro. En vez de eso, agregamos simplemente la URL de la(s) referencia(s) para el arreglo y agregamos el ítem seleccionando el list box en el diálogo.


Dmitri Popov es un escritor independiente cuyos artículos se han publicado en revistas de computación de Rusia, Inglaterra, Estados Unidos, Alemania y Dinamarca.


Sacado de: Linux.com

Technorati Profile


2 comentarios:

lacucaramacara dijo...

Modifiqué un poco la macro para que se ajustara a un cuadro de diálogo en el que se emplea un ComboBox en lugar de un ListBox, espero que sirva de ayuda a quien esté trabajando en el tema.

Sub LookupWithGUI()

Dim Dialog As Object, Library As Object
Dim TheDialog As Object, DialogField As Object
Dim exitOK As String, CurrentItemPos As Integer
Dim MotorBusqueda As String

'Los botones que se definan en el dialogo deben ser del tipo
'OK y Cancel respectivamente para que la Macro pueda funcionar

URLArray=Array("http://www.google.com.co/search?q=definicion%3A",_
"http://search.yahoo.com/search?p=",_
"http://es.wikipedia.org/wiki/Special:Search?search=")

ThisDoc=ThisComponent
LookupWord=ThisDoc.CurrentController.getViewCursor

'Validar que se haya seleccionado algo
If LookupWord.String <> "" Then

exitOK=com.sun.star.ui.dialogs.ExecutableDialogResults.OK
Library=DialogLibraries.GetByName("Buscador1")
TheDialog=Library.GetByName("Dialog1")

Dialog=CreateUnoDialog(TheDialog)
'XRay Dialog 'depuracion del dialogo
DialogField=Dialog.GetControl("ComboBox1")

'Se insertan las opciones en el ComboBox1
DialogField.addItem("Google",1)
DialogField.addItem("Yahoo!",2)
DialogField.addItem("Wikipedia",3)


If Dialog.Execute=exitOK Then
'XRay DialogField 'depuracion del combo box
MotorBusqueda = DialogField.SelectedText 'acceso directo a la propiedad
SELECT CASE MotorBusqueda
CASE "Google":
Shell("firefox",1, URLArray(0) & LookupWord.String)
CASE "Yahoo!":
Shell("firefox",1, URLArray(1) & LookupWord.String)
CASE "Wikipedia":
Shell("firefox",1, URLArray(2) & LookupWord.String)
CASE ELSE:
MsgBox("Selección Invalida",16,"Curso de Open Basic")
END SELECT
End If

Dialog.Dispose

Else
MsgBox("Debe seleccionar una palabra antes de ejecutar esta macro",16,"Curso Open Basic")

End If

End Sub


Att

Jose Andres Martinez

NetoX dijo...

Jose gracias por el aporte.