[RESUELTO] Pegar imagen desde porta-papeles o screenshot

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

[RESUELTO] Pegar imagen desde porta-papeles o screenshot

Notapor alsoor » Mié Oct 21, 2015 3:30 pm

Saludos queridos mentores en esta ocasión pido de su ayuda para que me orienten en una pequeña cuestión a la cual no le he encontrado solucion, el problema es que en el conjunto de macros que estoy tratando de implementar me veo en la necesidad de agregar un pequeño botón en un dialogo que le de la opción al usuario de pegar una captura de pantalla en una de las hojas de Calc, hoja que ya esta preestablecida en el mismo archivo de las otras macros. Esto debido a que el usuario va capturando información pero al ir interactuando con otras herramientas estas presentan errores por lo que se les pide que tomen una captura de pantalla y la agreguen en la hoja destinada como respaldo, el conflicto viene cuando en mitad de la captura ocurre este error y se ven forzados a apresurar su captura o cerrar el dialogo para poder pegar la imagen.

:idea: Solución: poner un botón en el cuadro de dialogo que pegue esa captura donde debe de ir sin afectar otras actividades.
:crazy: Problema: San Google solo me dice como pegar texto desde el porta-papeles o insertar una imagen desde un directorio.

Si alguien me puede orientar para poder crear este botón con esta función se los voy a agradecer mucho. :super:

P.D.: Mauricio espero ahora si haber cerrado correctamente el tema :mrgreen:
Última edición por alsoor el Mar Oct 27, 2015 6:17 am, editado 1 vez en total
OpenOffice 4.1 en Windows 7 32 bits
alsoor
 
Mensajes: 11
Registrado: Lun Ago 03, 2015 12:45 am

Re: Pegar imagen desde porta-papeles o screenshot

Notapor fornelasa » Jue Oct 22, 2015 6:13 pm

Si suponemos que la captura de pantalla ya está en el portapapeles, de entrada parece que asignando esta macro al botón en cuestion deberia funcionar:
Código: Seleccionar todo   Expandir vistaContraer vista
Sub Pegar
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
End Sub

A grandes rasgos ejemplo:

Saludos, Federico.
Adjuntos
Paste.ods
Pegar.
(11.78 KiB) 71 veces
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
fornelasa
 
Mensajes: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Pegar imagen desde porta-papeles o screenshot

Notapor alsoor » Mar Oct 27, 2015 6:15 am

Gracias Federico y perdón por demorar en contestar y en cerra el tema, estuve un poco ocupado, tu respuesta me servio de mucho, aun que le tuve que agregar unas lineas mas para ajustarla a lo que buscaba y quedo excelente.

Comparto el código de la macro por si a alguien mas le puede ser util.

Código: Seleccionar todo   Expandir vistaContraer vista
Sub Pegar
'Variables
dim donde as string
dim document as object
dim dispatcher as object
dim args1(0) as new com.sun.star.beans.PropertyValue
dim args2(0) as new com.sun.star.beans.PropertyValue
dim args3(0) as new com.sun.star.beans.PropertyValue

' Aquí uso una función para detectar la ultima celda vacía para no sobrescribir y/o borrar datos
'el String le dirá al UnoService el nombre de la celda donde debe pegar la información
donde = "A"+(UltimaFilaFC+1)

'aquí empieza la magia del UnoService
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
args1(0).Name = "Nr"
args1(0).Value = 3
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1()) 'nos movemos a la hoja donde ira el contenido del porta papeles
args2(0).Name = "ToPoint"
args2(0).Value = donde
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2()) 'nos ubicamos en la celda donde pegaremos el contenido del porta papeles
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
args3(0).Name = "Nr"
args3(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args3()) 'regresamos a la hoja donde el usuario esta capturando información
End Sub


Nuevamente gracias Federico por tu tiempo para responder :bravo:
OpenOffice 4.1 en Windows 7 32 bits
alsoor
 
Mensajes: 11
Registrado: Lun Ago 03, 2015 12:45 am


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados