Saber donde esta el cursor

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
ltubio
Mensajes: 3
Registrado: Lun May 03, 2010 9:03 am

Saber donde esta el cursor

Mensaje por ltubio »

se me olvido indicar antes que tambien necesito como detetar en que zona se encuentra el cursor activo( si esta en el encabezamiento, o en el pie, o en el cuerpo principal del mensaje, asi como si se encuentra dentro de un cuadro de dialogo u otro elemento. Gracias

Editado por el moderador (mauricio) para separar el mensaje del tema original por tratarse de un problema diferente. Si no lo has hecho aún por favor lee la Guía de supervivencia
Aprendiendo a programar Visual Basic 6.0 con OpenOffice 3.1
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Saber donde esta el cursor

Mensaje por mauricio »

Hola...

¿Para que necesitas esto?

Esto es algo complejo dada la gran cantidad de elementos que puede tener una página, una primera aproximación sería consultando el estilo

Código: Seleccionar todo

Sub DondeEstoy()
Dim oVCursor As Object

    oVCursor = ThisComponent.getCurrentController.getViewCursor

    Select Case oVCursor.ParaStyleName
        Case "Header"
            MsgBox "Estoy en el encabezado"
        Case "Footer"
            MsgBox "Estoy en el pie de página"
        Case Else
            MsgBox "Estoy en el cuerpo del documento"
    End Select

End Sub
Pero, en algunas circunstancias esto falla, por ejemplo, si el cursor esta en el encabezado y dentro de una tabla, creo que podrías buscar alternativas para tus necesidades...

Por favor, si esto responde tu pregunta, edita el primer mensaje de este hilo y agrega al principio del título la etiqueta [RESUELTO], de esta forma conseguiremos un foro más ordenado.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
ltubio
Mensajes: 3
Registrado: Lun May 03, 2010 9:03 am

Re: Saber donde esta el cursor

Mensaje por ltubio »

Muchas gracias Mauricio , tu ayuda ha sido de gran utilidad

Te comento la necesidad, nuestra aplicación permite crear plantillas en OOWriter que posteriormente son usadas en la misma aplicación. Estas plantillas se crean introduciendo texto directamente en el OOwriter y añadiendo campos de nuestra base d datos que para facilidad del usuario aparecen representados en una pequeña ventana, y en la cual permiten seleccionarse. Por este motivo necesito saber en qué sección se encuentra el cursor, ya que al seleccionar el campo en la ventana externa nosotros situamos este campo en la posición correspondiente al cursor actual en OOWriter.

Con lo que me has indicado ya he conseguido introducir texto en los encabezados, pie y cuerpo principal del documento incluso en tablas creadas dentro del cuerpo principal , ya solo me falta lo más complicado introducirlo en los Cuadro de Texto ("Frame contents") .

No se si me puedes ayudar con esto, pero te lo agradecería. También me gustaría saber si existe alguna pagina web donde se especifique la jerarquía de clases con la que trabaja OO y sobre todo donde mirar los métodos y variables que pertenecen a cada clase (por ejemplo donde ver que ParaStyleName es una variable accesible de la clase VCursor). Muchas gracias por todo.
Aprendiendo a programar Visual Basic 6.0 con OpenOffice 3.1
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Saber donde esta el cursor

Mensaje por mauricio »

Hola a todos...

Dices - situamos este campo en la posición correspondiente al cursor actual en OOWriter-, la posición actual del cursor la obtienes con:

Código: Seleccionar todo

oVCursor = ThisComponent.getCurrentController.getViewCursor
que es el cursor visual del cual solo hay uno, a diferencia de los cursores no visuales que puedes crear y manipular varios...

Si vas a introducir texto en un cuadro de texto, es sencillo si ya sabes cual es:

Código: Seleccionar todo

Sub Main
Dim oDoc As Object
Dim oForma As Object   
   
    oDoc = ThisComponent
    'La primer forma del documento
    oForma = oDoc.getDrawPage.getByIndex(0)
    'Verificamos que sea un cuadro de texto
    If oforma.getShapeType = "com.sun.star.drawing.TextShape" Then
        'Cambiamos su texto
        oForma.setString( "HOLA" )
    End If
   
End Sub
Como los indices pueden cambiar bastante, puedes usar el nombre del cuadro de texto para ubicarlo, primero establecelo en el documento

Código: Seleccionar todo

Sub Main2
Dim oDoc As Object
Dim oForma As Object   
Dim co1 As Integer
Dim sNombre As String

    'El nombre de nuestro cuadro de texto
    sNombre = "Info"
    oDoc = ThisComponent
    'Iteramos entre todas las formas del documento
    For co1 = 1 To oDoc.getDrawPage.getCount
        'Accdedemos una por una
        oForma = oDoc.getDrawPage.getByIndex(co1-1)
        'Verificamos que sea un cuadro de texto
        If oForma.getShapeType = "com.sun.star.drawing.TextShape" Then
            'Verificamos que sea el necesario
            If oForma.getName = sNombre Then
                'Cambiamos su texto
                oForma.setString( "HOLA" )
            End If
        End If
    Next
   
End Sub

Ahora, si quieres saber si el cursor esta dentro de una cuadro de texto...

Código: Seleccionar todo

Sub Main3
Dim oSel As Object

    'La selección actual
    oSel = ThisComponent.getCurrentController.getSelection.getByIndex(0)
    'Verificamos si es una forma
    If oSel.getImplementationName = "SwXShape" Then
        'Verificamos que sea un cuadro de texto
        If oSel.getShapeType = "com.sun.star.drawing.TextShape" Then
            MsgBox "Estoy dentro de un cuadro de texto"           
        End If
    End If
   
End Sub
Por favor, si esto responde tu pregunta, edita el primer mensaje de este hilo y agrega al principio del título la etiqueta [RESUELTO], de esta forma conseguiremos un foro más ordenado.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder