El sáb, 25-02-2006 a las 05:37, Ismael Fanlo escribió:

> Hola, Alexandro!
>
[...]
>
> No puedo estar de acuerdo contigo... el Basic de OOo necesita _mucho_ más
> tiempo que el VBA.  Y la causa es ese endiablado sistema de servicios e
> interfaces que me pone de los nervios.  La arquitectura de objetos de MSO es
> mucho más comprensible para los seres humanos.   La de OOo sólo la entienden
> los programadores de java (creo que corría uno por este hilo... disfrutará!)
> :-)

Y yo no puedo contradecirte, porque nunca he programado con VBA, sólo
con StarBasic. Podríamos decir que estoy "en la vereda de enfrente" como
se dice por aquí.

Sí estoy de acuerdo que el paradigma que se implementa en UNO es dificil
de atacar y entender. Te mareas con tantos servicios e interfaces; y
también estoy de acuerdo contigo en que se parece más a Java que a otra
cosa.

Lo más importante (a mi juicio), que se debe comprender es el paradigma
MVC (model / view / controller) en el manejo de los documentos
http://api.openoffice.org/docs/DevelopersGuide/OfficeDev/OfficeDev.xhtml, y del 
paradigma MV (model / view) en el manejo de formularios y controles 
http://api.openoffice.org/docs/DevelopersGuide/Forms/Forms.xhtml.

(no sé si en algún lado está traducido al castellano la guía del
desarrollador, pero sería una muy buena tarea).

> Por ejemplo, he dedicado horas buscando un método equivalente al setFocus
> del VBA.  Estoy (de hecho ya es funcional) haciendo una calculadora
> integrable en OOo y deseo que cuando se pulse una tecla de un dígito, el
> control correspondiente tome el enfoque.  Pues estoy desesperado tras horas
> de búsqueda y buceo en el SDK... mi limitación con el idioma tampoco ayuda.
> :-(

Aquí hay un ejemplo del MV. Para establecer el foco necesitas acceder a
la vista (view) del control, y no al modelo, que es lo que utilizas
generalmente en el código para modificar sus propiedades, como por
ejemplo establecer el valor de un campo de texto.

Lo primero es acceder a los controles suponiendo que conoces cuál es el
modelo del control al que quieres pasar el foco. El modelo del control
puedes obtenerlo a través del formulario. Un ejemplo, digamos que el
usuario presionó el '1' y tú quieres pasarle el foco a un botón llamado
'boton1' dentro del formulario. Suponiendo que mantienes una referencia
al formulario en el objeto 'oFormulario', lo logras con

Dim oBoton1 as Variant

oBoton1 = oFormulario.getByName("boton1") ' oBoton1 es la referencia al 
XControlModel del control

Los controles no están asociados al formulario, sino al controlador del
documento. Supongo que esto es por que forma parte de la interacción con
el usuario.

Para obtener el control (XControl) asociado a un XControlModel lo debes
hacer a través del método getControl de la interfaz XControlAccess, que
está asociada al controlador del documento actual.

Aquí te pongo un Sub útil para el tema del foco:

'
' Esta subrutina pasa el foco al control del formulario asociado al modelo 
'oControlModel'.
'
Sub setFocus (oControlModel As Variant)

        Dim oController As Variant
        Dim oControl As Variant

        oController = ThisComponent.getCurrentController
        oControl = oController.getControl (oControlModel)
        oControl.setFocus

End Sub


Si lo llamas con el modelo obtenido en el paso previo, lograrás pasar el
foco al control que tú quieras.

Espero no confundirte más...

Saludos,

Santiago.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Responder a