Como se puede saber que contenido tiene el portapapeles de windows desde VFP
6.0
Necesito saber si el contenido es texto o una imagen, para proteger errores
de
volcado.
Muchas gracias.
--
Javier Gutierrez Alvarez
Madrid - España
? _Cliptext rerornará una cadena vacia, si el portapapeles esta vacio, o
contiene una imagen.
--
Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos
"Javier gutierrez" <al...@alzar.es> escribió en el mensaje
news:OjqGw2FN...@TK2MSFTNGP12.phx.gbl...
"Luis María Guayán" <luis...@portalfoxxx.com> escribió en el mensaje
news:uHKhMUGN...@TK2MSFTNGP14.phx.gbl...
_Cliptext, es una variable del Sistema, por lo tanto lo tratas como una
variable más.
O sea, para recuperar el valor, simplemente realiza la asignación como
desees.
Por ejemplo:
En Word escribes: Hola desde Word.
Seleccionas y lo copias, por ejemplo con (ctrl-c)
Y desde VFP
?_Cliptext
o
MiValorDelPortaPapeles = _Cliptext
?MiValorDelPortaPapeles
o
ctrl-v
Si te fijas bien en la respuesta de Luís María, ya te esta indicando como
realizar la recuperación:
>>? _Cliptext rerornará una cadena vacia, si el portapapeles esta vacio, o
>>contiene una imagen.
Saludos, Antonio Muñoz de Burgos
www.emans.com (Web realizada en vFoxPro)
eMans AC (Administrador Corporativo para SQL Server 2000&2005)
Manifestando el apoyo a la comunidad de Visual FoxPro.
"Javier gutierrez" <al...@alzar.es> escribió en el mensaje
news:%23d5OuyH...@TK2MSFTNGP14.phx.gbl...
"Antonio Muñoz de Burgos y Caravaca" <emans...@emans.com> escribió en el
mensaje news:uwrd8aIN...@TK2MSFTNGP09.phx.gbl...
En principio, para una imagen la idea es la misma.
La única diferencia y totalmente lógica:
Es que la asignación la tienes que realizar a un objeto con capacidad y/o
soporte de "embeber y/o linkar a objetos"
Por ejemplo utilizar el : oleBoundControl u otro control especifico.
Saludos, Antonio Muñoz de Burgos
www.emans.com (Web realizada en vFoxPro)
eMans AC (Administrador Corporativo para SQL Server 2000&2005)
Manifestando el apoyo a la comunidad de Visual FoxPro.
"Javier gutierrez" <al...@alzar.es> escribió en el mensaje
news:evgSFzIN...@TK2MSFTNGP12.phx.gbl...
Con Visual FoxPro puede aprovechar la eficacia de otras aplicaciones para Windows compartiéndo información con ellas. Puede copiar y pegar datos de una aplicación a otra, combinar correspondencia mediante datos de tablas de Visual FoxPro, vincular o incrustar datos de otras aplicaciones, e importar o exportar datos entre aplicaciones. El uso compartido de información permite ahorrar tiempo y evitar errores. Por ejemplo, en lugar de escribir resultados en una tabla desde Excel, puede copiar los resultados o vincularlos a Excel para obtenerlos automáticamente.
Puede ampliar la potencia de las aplicaciones de Visual FoxPro con las capacidades de otras aplicaciones de Automatización o de controles ActiveX. En los formularios o campos de tipo General de sus aplicaciones, puede incluir funciones o datos específicos como texto, sonido, imágenes y vídeo procedentes de otras aplicaciones. Puede ver o manipular estos datos de forma visible mediante la aplicación utilizada para crearlos o bien, manipular los datos de forma invisible y automática controlando la aplicación con Automatización.
Otras aplicaciones también pueden ampliar la eficacia de Visual FoxPro mediante Automatización. Incluso puede crear servidores de Automatización (componentes COM) en Visual FoxPro a los que pueden tener acceso todas las aplicaciones en modo local o remoto.
Envíe observaciones sobre este tema a
Microsoft
Para soporte técnico y problemas
con el producto, mire el tema "Microsoft Visual FoxPro Soporte
Técnico"..
© 1992 - 2003 Microsoft
Corporation. Todos los derechos reservados.
Traducido al Español por el grupo de traductores de
PortalFox.
Envíe un informe sobre errores en la traducción de este
tema
"Antonio Muñoz de Burgos y Caravaca" <emans...@emans.com> escribió en el mensaje news:%23fwtTSJ...@tk2msftngp13.phx.gbl...
"Javier gutierrez" <al...@alzar.es> escribió en el mensaje news:e4$SI1PNF...@TK2MSFTNGP10.phx.gbl...
Hola Javier:
ok,
entendido...
Siguiendo en los que estábamos, la idea sigue siendo
similar.
Efectivamente, si quieres guardar una imagen contenida en el
Portapapeles, no puedes realizar el retorno con _ClipText, ya que solamente
maneja texto.
Justamente por eso y tal vez, no bien explicado por mi
parte, la utilización debe de ser por medio de un control OLE.
La
utilización del componente; con soporte de imagen ya es de tu selección, es
válido, cualquiera de los que existen en el mercado, los que mejor funcionan son
los de DBI o utilizando alguno de los que se incluyen con MS VFP.
Pero he
aquí un ejemplo sencillo y lo puedes probar fácilmente en un par de minutos,
utilizando el RichText, este control soporta imágenes y texto.
Te creas
un formulario, utilizas el OLEControl de VFP con el componente
RichText.
(1) Copias una imagen al Portapapeles desde tu programa de
Gráficos.
(2) Luego basta con pegar, por ejemplo (ctrl-v) en formulario VFP
en el control RichText y verás como tienes la imagen del Portapapeles.
El
realizar por código de igual forma y sencillo, ya que el control soporta eventos
de teclado, y dispones de la propiedad "TextRTF", para asignar todo aquello que
es soportado en RTF, puedes utilizar el que más te guste o te sea más
fácil.
Esta es la
opción más sencilla, en este caso he utilizado el RichText, para el ejemplo,
pero podría ser cualquier otro componente que soporte
imagen.
Esto es válido para cualquier versión de
VFP, desde VFP3 a VFP9
Otra formas, bueno realmente, se puede
aplicar como mínimo 5 métodos (formas)
Una de ellas es utilizando rutinas de las biblioteca API, valido para todas las versiones VFP, esto lo tienes todo en la ayuda, esta opción es válida para no salirnos de VFP.
Es utilizando _EdPaste
_EdPaste( ) : Copia el texto del Portapapeles al editor en la posición actual, esto lo lleva a tu control OLE.
void _EdPaste(WHANDLE wh)
WHANDLE
wh; /*
Controlador de la ventana de edición. */
Dentro de esta misma línea, aunque puede ser un poco más trabajosa, ya que primero deberás pasar el contenido del Portapapeles a un fichero, pero eso lo realizas sin problemas por programación, tienes a tu disposición todas las funciones para ello, y ya luego la manipulación luego es bastante sencilla, con esto obtienes un mayor control sobre la imagen.
Ejemplos que lo tienes en la ayuda:
es para tratar desde fichero.
Código
C
#include <pro_ext.h>FAR Example(ParamBlk FAR *parm){#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle)) WHANDLE wh; if (!_SetHandSize(parm->p[0].val.ev_handle, parm->p[0].val.ev_length+1)){
_Error(182); // "Memoria insuficiente" }pFILENAME[parm->p[0].val.ev_length] = '\0';
_HLock(parm->p[0].val.ev_handle); wh = _EdOpenFile(pFILENAME, FO_READWRITE); _HUnLock(parm->p[0].val.ev_handle); _EdSelect(wh, 0, 1); _EdCopy(wh); _EdSetPos(wh, 2);_EdPaste(wh);
}FoxInfo miInfoFox[] = { {"EDCOPY", (FPFI) Example, 1, "C"},};FoxTable _FoxTable = { (FoxTable FAR *) 0, sizeof(miInfoFox)/sizeof(FoxInfo), miInfoFox};
Dentro de esta línea, puedes revisar
lo siguiente:
Rutinas para la manipulación del
editor de textos y el Portapapeles.
Estas rutinas de la API permiten manipular el
editor de textos de Visual FoxPro, el archivo abierto en el editor de textos y
el Portapapeles.
_EdActive( )
Oculta o muestra el intervalo de selección o
el punto de inserción.
_EdCloseFile( )
Cierra el archivo
especificado y lo guarda sin preguntar, solicita confirmación antes de guardarlo
o lo guarda con otro nombre.
_EdCopy( )
Copia el área
seleccionada al Portapapeles.
_EdCut( )
Copia el área
seleccionada al Portapapeles y la elimina del editor.
_EdDelete( )
Elimina el área
seleccionada. Si no hay selección, elimina el carácter en la posición
actual.
_EdGetChar( )
Obtiene el carácter
en EDPOS.
_EdGetEnv( )
Lee varias
configuraciones del editor.
_EdGetLineNum( )
Devuelve el
número de línea de la posición EDPOS.
_EdGetLinePos( )
Devuelve la
posición EDPOS al comienzo de la línea EDLINE.
_EdGetPos( )
Devuelve la posición
POS actual del editor o devuelve el punto de acoplamiento.
_EdGetStr( )
Obtiene el texto
entre EDPOS y EDPOS, incluidas, y lo coloca en TEXT.
_EdIndent( )
Sangra el texto
seleccionado en int tabuladores. Int puede ser negativo para obtener una sangría
francesa.
_EdInsert( )
Inserta BYTES de
TEXT.
_EdLastError( )
Devuelve el
número del último error del editor.
_EdOpenFile( )
Inicia una sesión del
editor con este archivo.
_EdPaste( )
Copia el texto del
Portapapeles al editor en la posición actual.
_EdPosInView( )
Devuelve TRUE si
la posición del editor es visible.
_EdRedo( )
Rehace la última
acción deshecha.
_EdRevert( )
Vuelve a la última
versión guardada.
_EdSave( )
Guarda el archivo sin
cerrar la ventana de edición.
_EdScrollToPos( )
Asegura que la
posición EDPOS pasada está en la pantalla, pero no mueve el punto de inserción.
BOOL significa centrar EDPOS verticalmente.
_EdScrollToSel( )
Asegura que el
punto de acoplamiento de la selección está en la pantalla. BOOL significa
centrar el punto de acoplamiento verticalmente.
_EdSelect( )
Selecciona el
intervalo desde EDPOS hasta EDPOS. Para mover el punto de inserción, establezca
ambas posiciones EDPOS con el mismo valor.
_EdSendKey( )
Simula la pulsación
de la tecla indicada en int.
_EdSetEnv( )
Establece diferentes
configuraciones del editor.
_EdSetPos( )
Mueve el punto de
inserción y deselecciona lo que estuviera seleccionado
actualmente.
_EdSkipLines( )
Mueve el punto de
inserción desde EDPOS hasta el comienzo de la línea int.
_EdUndo( )
Deshace los últimos
cambios realizados.
_EdUndoOn( )
Agrupa las acciones
realizadas después de que se pase _EdUndoOn( ) hasta que se vuelva a pasar otra
vez como una sola acción a efectos de deshacer.
Para el caso que comentas de VFP9, sobre la propiedad "PictureVal" el valor es asignado a partir de un fichero, por lo tanto si deseas utilizar este método, primero deberás llevarlo a fichero, por algunos de los métodos comentados.
Otra opción es utilizar un tabla, con un campo General que haga de puente, con el Clipboard, esta opción también te permitirá realizar el pegado por código.
Esto también lo tienes en la Ayuda: Revisa-> Paste Special Dialog Box
El parámetro Paste, te permitirá asignar la imagen al campo General.
De la Ayuda VFP9:
Paste:
Embeds the object from the Clipboard in the
current General field.
En fin, son opciones, aunque entiendo que para el caso que comentas, la más sencilla y simple es la primera de todas, y en cualquiera de los casos, también veo factible la opción de pasarlo a fichero el contenido del Portapapeles, ya que cualquiera de estas dos opciones son fácilmente llevadas a los Reports de VFP, ya que me imagino que existirá luego la necesidad de sacarlo por papel.
"Javier gutierrez" <al...@alzar.es> escribió en el mensaje news:uXm3fkSN...@TK2MSFTNGP10.phx.gbl...