Necesito copiar el texto de una variable al Portapapeles


([N2] desarrollosvfp) #1

Hola mis amigos. Una ayudita por favor :wink:
Tengo una variable Alfabética y necesito copiar su contenido al Portapapeles.

En Visual FoxPro era algo como: _CLIPTEXT= m.VariableAlfabetica
Y listo, ya se podía pegar el texto en cualquier parte con CTRL+V

Por favor, ojalá que la solución sea multplataforma.
Muchas gracias por la colaboración.


([N2] Mgalvezh) #2

Mira esto https://velneo.es/foros/topic/simular-controlc-copiar/

Saludos.
Miguel.

PD: Aprovechad las búsquedas del foro.


([N2] desarrollosvfp) #3

Gracias Mgalvezh.

La opción que me recomiendas exige abrir un Formulario que contenga un “Control de Edición Alfabética” con el texto a copiar.

Lo que necesito es que dentro de un Proceso (sin necesidad de abrir un formulario) se pueda copiar el contenido de una Variable Alfabética hacia el Portapapeles.

Supongo que se debe crear una función JavaScript a la cual pasarle la Variable Alfabética como parámetro.

Gracias.


([N1] wikan) #4

Buenas, en windows tienes disponible el comando clip, solo tendrías que redirigir la salida al comando para que la capture.

http://www.labnol.org/software/copy-command-output-to-clipboard/2506/


([N2] desarrollosvfp) #5

Gracias Wikan.

Según esto, habría que crear un archivo de texto con el contenido de la Variable Alfabética
(por ejemplo: aux_clip.txt en sysCacheClientPath o en tempPath() ).

Y luego ejecutar en esa ruta el comando de MS-DOS: type auxiliar.txt | clip

Esta ya es una solución. Hasta se podría crear una función de Velneo para ese fin pasándole la variable alfabética.

Lo único malo es que no sería multiplataforma :frowning:

Qué otra opción tenemos…


([N3] pacosatu) #6

Hola desarrollosvfp.

Efectívamente, el único método que hay en Velneo es usando la función copy() del VTextEdit o VLineEdit del API.
Como otras veces, podemos recurrir a una chapucilla con javascript:

  • Crea un Formulario FRM_CLIP con una Caja de Texto cuyo contenido sea la Variable local CTEXTO
  • En el evento POS_INI ejecuta un Manejador de javascript COPIAR_TEXTO_JS

// Seleccionamos el Texto de la Caja y copiamos al portapapeles
var oForm = theRoot.dataView()
// Solo podemos acceder a los controles en el evento POS_INI
var oTexto = oForm.control("TXT_TEXTO")
// Seleccionamos el texto de la Caja
oTexto.selectAll()
// Copiamos al portapapeles
oTexto.copy()
// Cerramos el formulario
oForm.cancel()

  • Fija el Ancho y Alto del control y formulario a 0 para que no se vea en pantalla

  • En el Estilo quita la barra de Título y Botones (marca todos los Sin…)

  • En el proceso principal ejecuta un código javascript como el siguiente:


// Instanciamos el formulario FRM_CLIP
var oForm = new VDataViewDialog(theRoot)
oForm.setDataView(VObjectInfo.TypeForm, "proy_app/FRM_CLIP")
// Le pasamos el Texto a copiar al portapapeles
oForm.setVar("CTEXTO", "texto a copiar")
// Ejecutamos el formulario (no se mostrará nada porque el tamaño es cero)
oForm.exec()

Y ahora la bronca a Velneo, “y todo este rollo por no disponer de una función nativa StringToClip(string) y no creo que la excusa sea que no es multiplataforma”.

Pruébalo
Saludos
Paco Satué


([N1] wikan) #7

En este post se explica como hacerlo para linux y osx