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.
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" <***@alzar.es> escribió en el mensaje news:e4$***@TK2MSFTNGP10.phx.gbl...
Hola Antonio.
Agradezco mucho que intentes ayudarme en la respuesta, pero creo que no me explico correctamente.
Tengo realizada una aplicacion de facturacion y control de almacen, en la cual quiero incluir el poder firmar
digitalmente los documentos de albaranes. Para eso hemos adquirido una tableta digitalizadora de la casa
Genius, el problema es que la firma me la envia al portapapeles o cualquier programa de dibujo.
To pregunte al principio como podia manejar algun control OCX como el image o el paintbrush de windows,
Luis Maria me contestó diciendo que en la version VFP 9.0 el control image llevaba una nueva propiedad a
la cual se le podia asignar el contenido del portapapeles, yo programo con la version 6.0, pero descargue la
version 9.0 para probar y si la solucion era posible adquirirla.
A partir de aqui empezó la nueva pregunta del portapapeles que tu contestaste.
La variable _cliptext solo maneja textos, y por lo tanto no me sirve para asignar los datos a la propiedad pictureval.
Como puedo asignar el contenido del portapapeles a esa propiedad ?? desde la programacion.
Si conoces algun solucion a mi problema desde la version 6.0, seria mejor todavia.
Los links que me envias no funcionan.
Un saludo.
"Antonio Muñoz de Burgos y Caravaca" <***@emans.com> escribió en el mensaje news:%***@tk2msftngp13.phx.gbl...
ooopppsss... El BOT que no hace caso, le ha dado a enviar... me falto esto, de la ayuda de VFP.
Compartir información y agregar OLE
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.
En esta sección
Compartir información dinámicamente
En Visual FoxPro puede incluir dinámicamente datos de otras aplicaciones, que seguirán manteniendo los datos. Para hacer esto, vincúle o incruste los datos en la aplicación.
Agregar objetos OLE a las aplicaciones
Puede agregar objetos OLE a tablas y formularios de forma interactiva o mediante programación.
Secciones relacionadas
Desarrollar aplicaciones Visual FoxPro
Incluye información conceptual acerca de cómo desarrollar aplicaciones Visual FoxPro, instrucciones para crear bases de datos e interfaz de usuario, y otras tareas necesarias para crear aplicaciones Visual FoxPro.
Técnica de arrastrar y soltar OLE
Describe arrastrar y soltar OLE, una potente y útil herramienta admitida por Visual FoxPro, la cual le permite mover datos entre otras aplicaciones que admiten arrastrar y soltar OLE (como Visual FoxPro, Visual Basic, Microsoft Windows Explorer, Word y Excel, etcétera).
Programar en Visual FoxPro
Describe cómo acceder a toda la eficacia de Visual FoxPro creando aplicaciones que incorporan técnicas de programación orientada a objetos el modelo controlado por eventos para maximizar su productividad mientras programa.
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
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.
Post by Antonio Muñoz de Burgos y CaravacaEn principio, para una imagen la idea es la misma.
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.
Post by Javier gutierrezGracias Antonio por la observacion.
Pero ya vi como lo puso Luis Maria, precisamente cuando es una imagen
retorna cadena vacia,
por lo tanto como puedo recuperar una imagen?
Post by Antonio Muñoz de Burgos y Caravaca_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.
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
Post by Javier gutierrezPost by Luis MarÃa Guayá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.
Post by Javier gutierrezGracias por la respuesta, pero como puedo recuperar el contenido en el caso
que sea una imagen ??
Post by Luis MarÃa GuayánLa variable del sistema _ClipText almacena el contenido del
portapapeles,
Post by Antonio Muñoz de Burgos y CaravacaPost by Javier gutierrezPost by Luis MarÃa Guayánsolo si es una cadena de texto.
? _Cliptext rerornará una cadena vacia, si el portapapeles esta vacio,
o
Post by Antonio Muñoz de Burgos y CaravacaPost by Javier gutierrezPost by Luis MarÃa Guayáncontiene 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
Post by Javier gutierrezHola ..
Como se puede saber que contenido tiene el portapapeles de windows desde
VFP
Post by Javier gutierrez6.0
Necesito saber si el contenido es texto o una imagen, para proteger
errores
Post by Javier gutierrezde
volcado.
Muchas gracias.
--
Javier Gutierrez Alvarez
Madrid - España