Ayuda con setPointer

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
gustavodiaz00
Mensajes: 64
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

Ayuda con setPointer

Mensaje por gustavodiaz00 »

Hola a todos, de nuevo por aca.

Estoy haciendo un simple drag an drop entre dos listbox y me quede estancado con el uso del punero del mouse.

Mas especificamente en la función

Código: Seleccionar todo

Sub MouseListener_mousePressed(oEv)
   Dim Ctrl_Evento as String
   Ctrl_Evento = oEv.Source.Model.Name
   
   Select Case oEv.Buttons
        Case com.sun.star.awt.MouseButton.LEFT
            oPointer = createUnoService("com.sun.star.awt.Pointer")
            oPointer.SetType(27)
            oEv.Source.Peer.SetPointer(oPointer)
            Nom_Control1 = Ctrl_Evento
            Nom_Control2 = ""
            oDlg.getControl(Nom_Control1).SelectItem(Item_Seleccionado, True)
        Case com.sun.star.awt.MouseButton.RIGHT
   End Select
End Sub
Cuando pulso el boton izquierdo del mouse y lo mantengo presionado la rutina funciona correctamente y me cambia el cursor de puntero por una mano, pero
cuando arrastro el mouse no hace lo mismo

Código: Seleccionar todo

Sub MouseMotionListener_mouseDragged(oEv as com.sun.star.awt.MouseEvent)
  Select Case oEv.Buttons
        Case com.sun.star.awt.MouseButton.LEFT
            Dim Ctrl_Evento as String
            Ctrl_Evento = oEv.Source.Model.Name
            oPointer = createUnoService("com.sun.star.awt.Pointer")
            oPointer.SetType(27)
            oEv.Source.Peer.SetPointer(oPointer)
            
            if Ctrl_Evento = "ListBox01" then
             SueltaPosX = oEv.X + Array_Listbox1(0)
             SueltaPosY = oEv.Y + Array_Listbox1(1)
            end if 
            if Ctrl_Evento = "ListBox02" then
             SueltaPosX = oEv.X + Array_Listbox2(0)
             SueltaPosY = oEv.Y + Array_Listbox2(1)
            end if 
            Seleccion_Item(Ctrl_Evento, SueltaPosX, SueltaPosY)
        Case com.sun.star.awt.MouseButton.RIGHT
            'MsgBox("Right Button")
  End Select
End Sub
Si alguien me pude orientar con esto lo agradeceria mucho.

Les dejo un ejemplo de lo que estoy haciendo para que lo vean y ver si encuentran la forma de corregirlo.
Adjuntos
Drag and Drop.ods
(11.03 KiB) Descargado 169 veces
LibreOffice 6.1 en KDE Neon
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Ayuda con setPointer

Mensaje por mauricio »

A mi no me funciona, en ninguno de tus dos ejemplos. He probado otras formas, pero sigue sin funcionar, tal vez algo cambio en el API, voy a investigar.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
gustavodiaz00
Mensajes: 64
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

Re: Ayuda con setPointer

Mensaje por gustavodiaz00 »

Gracias mauricio por tu respuesta creo que hay algo de eso.

Quedo es perando una respuesta de algien mas avezado que yo en el tema.
LibreOffice 6.1 en KDE Neon
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Ayuda con setPointer

Mensaje por fornelasa »

Yo no sé si pudiera hacerse.
En el ejemplo, en mi opinión, en realidad no estamos haciendo un arrastrar y soltar así tal cual, estamos simulándolo no haciéndolo.
Específicamente con el setPointer ojala alguien del foro se saque el as bajo la manga y nos oriente, yo definitivamente creo que no es posible.
Hay otras opciones más fáciles que arrastrar y soltar para pasar datos de un ListBox a Otro dentro de un cuadro de dialogo.

Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
gustavodiaz00
Mensajes: 64
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

Re: Ayuda con setPointer

Mensaje por gustavodiaz00 »

Si concuerdo contigo federico, era solamente un desafio que me propuse para ver si era posible con el lenguaje.

Pero me tope con varios problemas por ejemlo las posiciones del puntero no son siempre las mismas para el dialogo y los controles, y no podes tener referencia de donde esta parado el puntero.

Es un poco rebuscado lo que implemente con la converción de posiciones de los controles pero me dio una solución para saber si el puntero se encontraba dentro de cada control, porque el evento producido si devuelve el objeto del evento en donde se produce, pero cuando se suelta el boton despues de que se arrastra sigue devolviendo el objeto origen no el ojeto donde uno suelta.

Lo mas practico es poner un par de botones para pasar los item seleccionados entre los listbox, pero bueno era una idea que rondaba mi cabeza.

Tal vez se pueda tambien con un menu contextual pulsando el botton derecho.
LibreOffice 6.1 en KDE Neon
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Ayuda con setPointer

Mensaje por fornelasa »

Así es, adicionalmente si hubiera un evento mouseDraggedAndDropped tal vez pudiera hacerse algo con el puntero, pero hasta donde yo sé, no existe dicho evento dentro de un listbox y quien sabe si exista dentro de otro tipo de control, hay mouseDragged pero no mouseDraggedAndDropped por eso decía, no estamos haciendo un arrastrar y soltar cien por ciento puro.
Se puede usar mousePressed y mouseReleased pero eso es simular un mouseDraggedAndDropped

En fin, sigo pensando que no se puede.

Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Responder