Página 1 de 1

[RESUELTO] Pegar imagen desde porta-papeles o screenshot

Publicado: Mié Oct 21, 2015 3:30 pm
por alsoor
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:

Re: Pegar imagen desde porta-papeles o screenshot

Publicado: Jue Oct 22, 2015 6:13 pm
por fornelasa
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

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.

Re: Pegar imagen desde porta-papeles o screenshot

Publicado: Mar Oct 27, 2015 6:15 am
por alsoor
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

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: