QR en portapapeles

FiveWiDi
Posts: 1237
Joined: Mon Oct 10, 2005 2:38 pm
Has thanked: 3 times
Been thanked: 4 times

QR en portapapeles

Post by FiveWiDi »

Hola a todos,

¿Ustedes sabrían como hacer para generar un código QR, y dejarlo en el portapapeles para luego en otra aplicación realizar un 'pegar'?

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
User avatar
Antonio Linares
Site Admin
Posts: 42475
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 27 times
Been thanked: 63 times
Contact:

Re: QR en portapapeles

Post by Antonio Linares »

Carlos,

Aqui tenemos un muy buen ejemplo de QR de César:
viewtopic.php?p=276837#p276837

y luego seria cuestión de usar FW_CopyToClipboard( ... ) proporcionandole la imagen del QR.

nos falta ese paso... pensando...
regards, saludos

Antonio Linares
www.fivetechsoft.com
Cgallegoa
Posts: 497
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Has thanked: 1 time
Been thanked: 1 time
Contact:

Re: QR en portapapeles

Post by Cgallegoa »

Tocayo,

Code: Select all | Expand

#include "FiveWin.ch"

REQUEST FWZEBRA    // *** Indispensable para dibujar código QR

Function Inicio()
   LOCAL oDlg, hBmp
   LOCAL cTxt4QR := "Prueba de Copy - Paste" + CRLF + "FiveWin 2025" 

   hBmp := FW_BarCodeBmp( cTxt4QR, "QRCODE", 250, 250 )
   hBmp := bmp2alpha( hBmp )   // *** Sin esta línea QRcode tiene un feo marco negro
 // *** Siguiente línea hace la magia y guarda en el portapapeles, luego,
 // *** puedes hacer PASTE (Ctrl+V) en Paint, PhotoShop, Word,  etc., y recuperas tu código QR
   FW_CopyToClipboard(hBmp)
   
   DEFINE DIALOG oDlg SIZE 400,300 PIXEL TRUEPIXEL
        @ 20,20 XIMAGE oImg SIZE -20,-20 OF oDlg PIXEL RESOURCE hBmp
   ACTIVATE DIALOG oDlg CENTERED
return nil
//-----------------------------------------------------------------------//

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp  := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp  := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
return hBmp
//------------------------------------------------------------------------------//
Last edited by Cgallegoa on Sat Feb 08, 2025 5:46 pm, edited 1 time in total.
Saludos,

Carlos Gallego

*** FWH-24.07, xHarbour 1.3.1 Build 20240624, Borland C++7.70, PellesC ***
FiveWiDi
Posts: 1237
Joined: Mon Oct 10, 2005 2:38 pm
Has thanked: 3 times
Been thanked: 4 times

Re: QR en portapapeles

Post by FiveWiDi »

Antonio Linares wrote: Sat Feb 08, 2025 5:01 pm Carlos,

Aqui tenemos un muy buen ejemplo de QR de César:
viewtopic.php?p=276837#p276837

y luego seria cuestión de usar FW_CopyToClipboard( ... ) proporcionandole la imagen del QR.

nos falta ese paso... pensando...
Si, si. En el documento ya lo consigo imprimir, la intención es disponer de él en el clipboard.

Estoy mirando esto:
hBitmap := FW_BarCodeBmp( cText, "QR-CODE", 3.5, 3.5, Nil )
SetClipboardData( 2, hBitmap )
FW_CopyToClipBoard( cText )
FW_CopyToClipBoard( hBitmap, 2 )

Pero no me funciona, al menos en el Word no consigo que 'pegue' el Qr. (el cText sin problema).

A ver que se te ocurre.

Muchas gracias,

EDITADO
=======

FW_BarCodeBmp( cText, "QR-CODE", 3.5, 3.5, Nil ) creo que debía ser FW_BarCodeBmp( cText, "QRCODE", 3.5, 3.5, Nil )

Por otra parte, las unidades de FW_BarCodeBmp( cText, "QRCODE", 3.5, 3.5, Nil ), son pixels, pulgadas, centímetros?
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
Posts: 1237
Joined: Mon Oct 10, 2005 2:38 pm
Has thanked: 3 times
Been thanked: 4 times

Re: QR en portapapeles

Post by FiveWiDi »

Vamos bien!!!!

Por otra parte, las unidades de FW_BarCodeBmp( cText, "QRCODE", 3.5, 3.5, Nil ), son pixels, pulgadas, centímetros?

Me ha creado un QR que no parece correcto, desde el móvil no lo identifica.
Lo he 'pagado' en el Word, le he impreso y nada, que no le gusta.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
User avatar
sysctrl2
Posts: 1045
Joined: Mon Feb 05, 2007 7:15 pm
Has thanked: 4 times
Contact:

Re: QR en portapapeles

Post by sysctrl2 »

el tamaño estandard de un QR es 4.0
FW_BarCodeBmp( cText, "QR-CODE", 4.0, 4.0, Nil )

prueba hacerlo asi o mas grande
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
FiveWiDi
Posts: 1237
Joined: Mon Oct 10, 2005 2:38 pm
Has thanked: 3 times
Been thanked: 4 times

Re: QR en portapapeles

Post by FiveWiDi »

sysctrl2 wrote: Sat Feb 08, 2025 6:17 pm el tamaño estandard de un QR es 4.0
FW_BarCodeBmp( cText, "QR-CODE", 4.0, 4.0, Nil )

prueba hacerlo asi o mas grande
És para Verifactu, nos permiten entre 3 y 4 cm., lo voy a poner a 3,5cm.

He visto que CGallego utiliza 250,250 además de QRCODE.

FW_BarCodeBmp( cText, "QR-CODE", 3500, 350, Nil )
El QR mide 9,5 cm. aproximadamente, he probado con 129,129 y 'pagado' en un Word a DIN A4 mide 3,5 cm; para mi el tamaño correcto.

Ahora bien, me dibuja el marco negro y el lector no lo identifica como un QR válido.

Mi función es esta:

// Para usar QR precisa de "REQUEST FWZEBRA"
REQUEST FWZEBRA

FUNCTION VFQr2Clipboard( AMPAARRA, cNIF, cVFCODFAC, dDataFact, nImpotota )

Local cText := ""
Local hBitmap := 0

cText := VF_URL_QR( AMPAARRA, ;
AllTrim( cNIF ), ;
AllTrim( cVFCODFAC ), ;
dDataFact, ;
nImpoTota ;
)

Traza( 1, "cText=", cText )

MsgInfo( cText, "B" )

hBitmap := FW_BarCodeBmp( cText, "QRCODE", 129, 129, Nil )

hBitmap := bmp2alpha( hBitmap )

FW_CopyToClipBoard( hBitmap )

Return Nil
/* *********************************************************************************** */]

EDITO
=====
Da igual que use "QR-CODE" que "QRCODE"

EDITO-2
======
Y no necesita REQUEST FWZEBRA.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
Posts: 1237
Joined: Mon Oct 10, 2005 2:38 pm
Has thanked: 3 times
Been thanked: 4 times

Re: QR en portapapeles

Post by FiveWiDi »

He cortado con las tijeras el marco negro y el QR es correcto.

Venderé el soft con un kit de tijeras para QR.
:D :D :D

Y todo es digital, el soft digital, las tijeras con los dedos (digital). :wink:

Venga, que alguien me eche una mano. :oops:
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
Cgallegoa
Posts: 497
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Has thanked: 1 time
Been thanked: 1 time
Contact:

Re: QR en portapapeles

Post by Cgallegoa »

Parece que es un bug en FW_CopyToClipboard()

Otra opción es con oImg:bPainted. Hace el copy sin el feo marco

Code: Select all | Expand

#include "FiveWin.ch"

REQUEST FWZEBRA    // *** Indispensable para dibujar código QR

Function Inicio()
   LOCAL oDlg, hBmp
   LOCAL cTxt4QR := "Prueba de Copy - Paste" + CRLF + "FiveWin 2025" 

   hBmp := FW_BarCodeBmp( cTxt4QR, "QRCODE", 250, 250 )
   hBmp := bmp2alpha( hBmp )   // *** Sin esta línea QRcode tiene un feo marco negro
 // *** Siguiente línea hace la magia y guarda en el portapapeles, luego,
 // *** puedes hacer PASTE (Ctrl+V) en Paint, PhotoShop, Word,  etc., y recuperas tu código QR
 //  FW_CopyToClipboard(hBmp)    // *** También genera marco negro al hacer paste.
   
   DEFINE DIALOG oDlg SIZE 400,350 PIXEL TRUEPIXEL
        @ 03,20 BUTTON oBtn PROMPT "Copy" OF oDlg PIXEL SIZE 80,25 ACTION oImg:CopytoClipBoard(.T.)  

        @ 40,20 XIMAGE oImg SIZE -20,-20 OF oDlg PIXEL RESOURCE hBmp
        oImg:bPainted := {||oImg:CopytoClipBoard(.T.)}   // *** Hace el paste correcto, sin el cuadro negro.

   ACTIVATE DIALOG oDlg CENTERED
return nil
//-----------------------------------------------------------------------//

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp  := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp  := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
return hBmp
//------------------------------------------------------------------------------//
Ya no hace falta que incluyas las tijeras :)
Saludos,

Carlos Gallego

*** FWH-24.07, xHarbour 1.3.1 Build 20240624, Borland C++7.70, PellesC ***
FiveWiDi
Posts: 1237
Joined: Mon Oct 10, 2005 2:38 pm
Has thanked: 3 times
Been thanked: 4 times

Re: QR en portapapeles

Post by FiveWiDi »

Ostras!! :|

El caso es que no lo muestro en pantalla.

Voy a investigar XIMAGE a ver que hace.

Y anulo el pedido a Amazon de las 35698 tijeras que he pedido.

Supongo que si Antonio nos lee quizás resuelva el bug de FW_CopyToClipboard()

Muchas gracias por el interés.
Sigo investigando.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
User avatar
Antonio Linares
Site Admin
Posts: 42475
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 27 times
Been thanked: 63 times
Contact:

Re: QR en portapapeles

Post by Antonio Linares »

Carlos,

Has probado asi ?

FW_BarCodeBmp( cText, "QRCODE", 129, 129, Nil, CLR_WHITE )

No encuentro el código de Bmp2Alpha(), donde está ? :)
regards, saludos

Antonio Linares
www.fivetechsoft.com
FiveWiDi
Posts: 1237
Joined: Mon Oct 10, 2005 2:38 pm
Has thanked: 3 times
Been thanked: 4 times

Re: QR en portapapeles

Post by FiveWiDi »

Antonio Linares wrote: Sat Feb 08, 2025 8:49 pm Carlos,

Has probado asi ?

FW_BarCodeBmp( cText, "QRCODE", 129, 129, Nil, CLR_WHITE )

No encuentro el código de Bmp2Alpha(), donde está ? :)
Sigue apareciendo el marco negro alrededor. QR no identificable.

Function bmp2alpha( hBmp1 )
local hBmp, oBmp
oBmp := GdiBmp():New()
oBmp:CreateFromRes( hBmp1, 0 )
oBmp:Conver24to32Alpha( .F. )
hBmp := oBmp:GetGDIHbitmap()
oBmp:Set32Bits(.F.)
oBmp:Destroy()
DeleteObject( hBmp1 )
return hBmp
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
User avatar
Antonio Linares
Site Admin
Posts: 42475
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 27 times
Been thanked: 63 times
Contact:

Re: QR en portapapeles

Post by Antonio Linares »

Carlos,

Estoy probando asi pero desde el mspaint al pegar se ve todo en negro:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   FW_CopyToClipBoard( bmp2Alpha( FW_BarCodeBmp( "Hola", "QRCODE", 400.0, 400.0 ) ) )

return nil

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
   return hBmp
regards, saludos

Antonio Linares
www.fivetechsoft.com
FiveWiDi
Posts: 1237
Joined: Mon Oct 10, 2005 2:38 pm
Has thanked: 3 times
Been thanked: 4 times

Re: QR en portapapeles

Post by FiveWiDi »

Antonio Linares wrote: Sat Feb 08, 2025 9:35 pm Carlos,

Estoy probando asi pero desde el mspaint al pegar se ve todo en negro:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   FW_CopyToClipBoard( bmp2Alpha( FW_BarCodeBmp( "Hola", "QRCODE", 400.0, 400.0 ) ) )

return nil

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
   return hBmp
Precisamente lo que comentaba Carlos Gallego.
Al parecer antes sin la función bmp2alpha() se veía negro (eso está anotado en el código de ejemplo que ha publicado).
De ahí el uso de la función bmp2alpha(), para que no se viera todo en negro.

Yo incluso estaba pensando en crear un DIALOG, meterle el QR, usar métodos de la clase WINDOW y ver si se puede capturar; vamos una solución parecida que ha encontrado Carlos Gallego ante el error que se da ahora.
Pero yo crearía el DIALOG, le meto el QR, lo capturo y cierro DIALOG.
Al menos tendré respuesta al problema aunque no me guste mucho. De momento todo es teoría, es sólo una idea.
A ver mañana como me levanto y sigo con ello.

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
User avatar
Antonio Linares
Site Admin
Posts: 42475
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 27 times
Been thanked: 63 times
Contact:

Re: QR en portapapeles

Post by Antonio Linares »

Le consulto a Rao, el implementó estas funciones
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply