Se puede copiar y pegar una imagen directamente en un formulario?

365 views
Skip to first unread message

acmc

unread,
Aug 19, 2022, 2:49:16 PM8/19/22
to Comunidad de Visual Foxpro en Español
Hola Foxeros..
Desconozco si se puede hacer que dentro de un formulario se pudiera guardar una imagen, pero haciendo copiar y pegar, como se hace dentro de outlook para poder guardar dicha imagen en el registro, sin tener que generar un archivo de imagen y luego anexarlo, no se si me explique, en caso de que si, que tendría que hacer?

Salu2!!

HernanCano

unread,
Aug 19, 2022, 8:41:55 PM8/19/22
to Comunidad de Visual Foxpro en Español
Claro que sí, mientras seamos programadores !!!!!

Lo que debes tener en el clipboard es (¿cómo le dicen ustedes?) la "ruta", es decir el nombre del archivo con el directorio (FullPath) donde está ubicado.

Cuando un método del formulario recibe la info, toma ese nombre de archivo, y lo pone como la prop .Picture de un control Image (con un control Image se visualiza una imagen, cierto?)

javier Ballen

unread,
Aug 20, 2022, 12:01:42 AM8/20/22
to publice...@googlegroups.com
Buena noche,  muy interesado. En tu respuesta pero no entendí lo de prop. Picture,  me ayudan a entender  haber si lo aprendo a aplicar. 

Javier Ballen Alvarez
Bogotá - Colombia

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/37de8d64-a025-4541-b4dd-472b19900097n%40googlegroups.com.

Cristian Novoa

unread,
Aug 20, 2022, 8:52:40 AM8/20/22
to Comunidad de Visual Foxpro en Español
LPARAMETERS tcOrigen

LOCAL lcArchivo, lnPosImagen, lcPosImagen, llLleno, lcArchDestino, lbImagen, llError
LOCAL loBmp AS GpBitmap OF "libs/_gdiplus.vcx"


*-------------------------------
SELECT cImagenes
LOCATE FOR EMPTY(imagen)
IF ! FOUND()
    mensaje("Se ha copado el máximo de 9 imágenes. Puede eliminar una para agregar otra.")
    RETURN
ENDIF


*-------------------------------
IF tcOrigen = "ARCHIVO"
    lcArchivo = GETFILE('Imágenes BMP,JPG,GIF,PNG:BMP,JPG,GIF,PNG', 'Abrir Imagen...', 'Abrir',0,'Imagen producto')
    IF EMPTY(lcArchivo)
        RETURN
    ENDIF
ELSE    && "PEGAR"    (origen: imagen en portapapeles)
    lcArchivo = archazar("jpg")

    With _Screen.System.Drawing
        llError = .T.
        TRY
            loBmp = .Bitmap.FromClipboard()
            loBmp.Save(lcArchivo, .Imaging.ImageFormat.jpeg)    && el error lo da aqui, pero por si aca incluyo la linea de arriba tb
            llError = .F.
        CATCH
            mensaje("Hubo un error al pegar la imagen. Asegúrese de haberla copiado.")
        ENDTRY
       
        IF llError
            RETURN
        ENDIF
    EndWith
ENDIF



*-------------------------------
lcArchDestino = cambia_resol_y_formato_imagen(lcArchivo)

IF tcOrigen = "PEGAR"
    borra_arch(lcArchivo)
ENDIF

IF EMPTY(lcArchDestino)
    mensaje("Hubo un error al agregar la imagen.")
    RETURN
ENDIF


*-------------------------------
lbImagen = cast(filetostr(lcArchDestino) as blob)

lnTamanoImagenKB = INT(LEN(lbImagen)/1024)
IF lnTamanoImagenKB > 150    && restriccion por si acaso ?
    borra_arch(lcArchDestino)
    mensaje("La imagen a grabar es demasiado grande.")
    RETURN
ENDIF


*-------------------------------
lcPosImagen = ALLTRIM(STR(RECNO()))

thisform.mipgf1.mipgf_pgf1.mipgf_pag3.imagen&lcPosImagen..picture = lcArchDestino




REPLACE imagen WITH lbImagen



borra_arch(lcArchDestino)



BINDEVENT(thisform.mipgf1.mipgf_pgf1.mipgf_pag3.imagen&lcPosImagen., "click", thisform, "imagenes_agrandar_imagen")
thisform.mipgf1.mipgf_pgf1.mipgf_pag3.imagen&lcPosImagen..ToolTipText = "Haga click para agrandar"



thisform.lcambio_datos_imagenes = .T.



thisform.mipgf1.mipgf_pgf1.mipgf_pag3.micmd_eliminar._enabled = .T.
thisform.mipgf1.mipgf_pgf1.mipgf_pag3.cnt_rotar_girar.micmd_rotar_girar._enabled = .T.
thisform.mipgf1.mipgf_pgf1.mipgf_pag3.micmd_fijar_imagen_principal._enabled = .T.
thisform.mipgf1.mipgf_pgf1.mipgf_pag3.cnt_rotar_girar.micbo_tipo_rotar_girar._enabled = .T.

Zarlu

unread,
Aug 20, 2022, 12:17:09 PM8/20/22
to Comunidad de Visual Foxpro en Español
Buenos días amc!

Qué es lo que quieres "copiar y pegar" la ruta?, la imagen (de dónde provendría)?
Y que es lo que quieres guardar?, la iamgem? la ruta?

zarlu
Chetumal, Quintana Roo, México

HernanCano

unread,
Aug 20, 2022, 2:56:35 PM8/20/22
to Comunidad de Visual Foxpro en Español
Para descubrir cuál es el error debes quitar el manejador de errores (y volver a ponerlo luego que sepas cuál es y mehjorar tu app en base a ello).

Y cuando sepas cuál es el error, nos dices para seguir.

*-------------------------------
IF tcOrigen = "ARCHIVO"
    lcArchivo = GETFILE('Imágenes BMP,JPG,GIF,PNG:BMP,JPG,GIF,PNG', 'Abrir Imagen...', 'Abrir',0,'Imagen producto')
    IF EMPTY(lcArchivo)
        RETURN
    ENDIF
ELSE    && "PEGAR"    (origen: imagen en portapapeles)
    lcArchivo = archazar("jpg")

    With _Screen.System.Drawing
        llError = .T.
        *!* TRY
        local laerr(1)
        on error

            loBmp = .Bitmap.FromClipboard()
            loBmp.Save(lcArchivo, .Imaging.ImageFormat.jpeg)    && el error lo da aqui, pero por si aca incluyo la linea de arriba tb
        aerror(laerr)
        messageb(laerr(2))

            llError = .F.
        *!* CATCH
            *!* mensaje("Hubo un error al pegar la imagen. Asegúrese de haberla copiado.")
        *!* ENDTRY

Angel Perez

unread,
Aug 22, 2022, 12:30:48 AM8/22/22
to publice...@googlegroups.com
Creo que no me entendieron, lo de adjuntar un archivo es algo que no tiene chiste.. lo que quisiera hacer es algo similar como pegar en word desde el portapapeles alguna imagen, ya posteriormente si darle una ubicación a dicha imagen, el usuario esta muy acostumbrado a usar la herramienta de recorte de imagen, entonces la imagen esta en el portapapeles, de ahí q lo pudieran pegar en el formulario de fox pero no se q tipo de control pudiera usar y una vez pegado ahí ya poderlo guardar en una ubicación dentro del servidor

Salu2

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/V0f-z_8qpqs/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/98923603-9ba9-432d-9dae-d3c2431a04d5n%40googlegroups.com.

ZeRoberto

unread,
Aug 22, 2022, 7:25:06 AM8/22/22
to publicesvfoxpro
Lo que tendrías que hacer es comprobar si en tu formulario hicieron ctrl+v y revisar si en el portapapeles hay una imagen de estar correcto descargas la imagen en una variable y lo pasas al control image en su propiedad PictureVal.


Saludos

Ze


Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/CACdxo6jYZ3%3DrqHh_ZVXeVpF_c1SPT8QYqJ2XiW3Y-%3Dv1W7smWw%40mail.gmail.com.

ZeRoberto

unread,
Aug 22, 2022, 7:26:29 AM8/22/22
to publicesvfoxpro
O también pudieras usar este control


Saludos

Ze

Zarlu

unread,
Aug 22, 2022, 8:24:33 AM8/22/22
to Comunidad de Visual Foxpro en Español
Buenos días acmc!

Algo de la comunidad...

Suerte
zarlu
Chetumal, Quintana Roo, México

ZeRoberto

unread,
Sep 13, 2022, 9:36:16 PM9/13/22
to publice...@googlegroups.com
Descarga este programa, una vez que recortas la imagen te vas al menu edit y le das copy


Y en tu formulario puedes usar la opción pegar para copiar la imagen del portapapeles a un archivo y de ahi lo metes en tu control picture

Antes de ejecutar la opcion ClipToFile tienes que ejecutar esto

Do System.app

**
Procedure ClipToFile
Parameters tcFileName
Local llResult, loBmp
   llResult = .T.
   With _Screen.System.Drawing
         tcFileName = GetTempFile("jpg")
         Try
            loBmp = .Bitmap.FromClipboard()
            loBmp.Save(tcFileName, .Imaging.ImageFormat.Jpeg)
          Catch to loError
            llResult = .F.
         EndTry
   EndWith
Return (llResult)

**
Function GetTempFile
Parameters tcExtension, tlJustName
Local lcResult, loHandler, loFolder
    tcExtension = Iif(Vartype(tcExtension) == "C", tcExtension, "TMP")
    loHandler = NewObject("Scripting.FileSystemObject")
    loFolder = loHandler.GetSpecialFolder(2)
    lcResult = Addbs(loFolder.Path) + ForceExt(Sys(2015), tcExtension)
    If tlJustName
       lcResult = JustFName(lcResult)
    EndIf
    Release loHandler, loFolder
    Store .NULL. To loHandler, loFolder
Return (lcResult)


Saludos

Ze



Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/CACdxo6jYZ3%3DrqHh_ZVXeVpF_c1SPT8QYqJ2XiW3Y-%3Dv1W7smWw%40mail.gmail.com.

ZeRoberto

unread,
Sep 13, 2022, 9:39:15 PM9/13/22
to publice...@googlegroups.com
Aca te dejo el video que explica el manejo


Saludos

Ze




Reply all
Reply to author
Forward
0 new messages