Página 1 de 3

QR Code

Enviado: 22 Mar 2009 19:06
por Luciano Bonfim
Alguem conhece alguma DLL que eu possa usar, que crie uma imagem QR Code ?
QR Code é uma imagem em 2D similar ao código de barrasmas que comporta até set mil e poucos caracteres

Muito Obrigado

Re: QR Code

Enviado: 26 Mar 2009 14:00
por sygecom
Pode gerar direto usando as API do Google,
Em anexo um exemplo com Hwgui + Api do Google

QR Code

Enviado: 23 Nov 2014 00:45
por Adalberto
Caro, Luciano, boa noite.

Se que foi há muitos anos atrás que você procurou solução para os códigos QR.

Eu me pergunto se você lograstes imprimir esses códigos a partir da sua aplicação, eu estou trabalhando com Ext MiniGUI, e eu estou necesitanto para gerar e imprimir códigos QR, do meu aplicativo.

Eu li em \ MiniGUI \ Samples \ Avançado \ HMG_Zebra mas não consegue encontrar donde inserir o texto (que eu preciso apenas ao texto, alfa numérico), por exemplo: 978 389 011 / Pneus 14 x 16, mountain / $ 89,20 / 2014/02/14

Por favor me ajude, espero sua resposta.

Muito obrigado !!

Adalberto

QR Code

Enviado: 24 Nov 2014 16:27
por oxent_jabah
Caro Adalberto,

Na pasta "contrib" do harbour existe um projeto de nome "hbzebra" e neste tem vários testes com códigos de barras, inclusive com QRCODE. Veja se lhe atende.

Cecílio

QR Code

Enviado: 24 Nov 2014 16:36
por Kapiaba
// Seria +- assim usando a dll QRCodelib.Dll

Código: Selecionar todos

FUNCTION GERAR_QRCode()

   LOCAL cStr, cFile

   cStr:="conteúdo do_qrcode"

   cFile:="c:\arq.bmp"
 
   QRcode(cStr,cFile)

RETURN NIL
 
FUNCTION QRcode( cStr, cFile )

   #Define DC_CALL_STD  0x0020

   LOCAL qrDLL

   Generar_QR( cStr, cFile )

RETURN(NIL)

FUNC Generar_QR( cStr, cFile )

   LOCAL nResp
   LOCAL qrDLL

   qrDLL:=LoadLibrary("QRCodelib.Dll" )

   nResp:=DllCall(qrDLL,DC_CALL_STD,"FastQRCode",cStr,cFile)

   FreeLibrary(qrDLL)

RETURN NIL
abs

QR Code

Enviado: 25 Nov 2014 08:47
por Adalberto
Caros amigos, bom dia.
Muito obrigado por suas respostas, e obrigado pela vontade de cooperar.

Eu preciso criar o código QR, sem internet, parece que a solução proposta por kapiaba é adequada, mas preciso saber como dicer para a librería que trabalhe com o nível H para a capacidade de correção de erros.

Por favor, me judem com estos detalhes.

Cordiais saudações e minha oração por vóces desejando prosperidade.

[ ]Adalberto

QR Code

Enviado: 25 Nov 2014 10:08
por Kapiaba

QR Code

Enviado: 25 Nov 2014 10:16
por Kapiaba
Basei-se aqui: É em Fivewin, mas basta adaptar para seu uso.

Código: Selecionar todos

#Include "FiveWin.ch"

* HBZEBRA.LIB

* *********************************************************
* PROCEDURE MAIN
* PRINT oPRN PREVIEW
* PAGE
* EanQRCode(oPRN,50,50,1,"www.veneziasoft.com")
* ENDPAGE
* ENDPRINT
* RETURN
* *********************************************************

* iFlags = estratto da QRCODE.C della libreria HBZEBRA.LIB
*
* #define HB_ZEBRA_FLAG_QR_LEVEL_MASK 0x0700
* #define HB_ZEBRA_FLAG_QR_LEVEL_L 0x0100
* #define HB_ZEBRA_FLAG_QR_LEVEL_M 0x0200
* #define HB_ZEBRA_FLAG_QR_LEVEL_Q 0x0300
* #define HB_ZEBRA_FLAG_QR_LEVEL_H 0x0400
*
* switch( iFlags & HB_ZEBRA_FLAG_QR_LEVEL_MASK )
* {
* case HB_ZEBRA_FLAG_QR_LEVEL_M:
* iLevel = 1;
* break;
* case HB_ZEBRA_FLAG_QR_LEVEL_Q:
* iLevel = 2;
* break;
* case HB_ZEBRA_FLAG_QR_LEVEL_H:
* iLevel = 3;
* break;
* default:
* iLevel = 0;
* break;
*

* *********************************************************
* EanQRCode(oPRN, nY, nX, nWidth, nQRCODE, nColor, iFlags)
*
* oPRN = Output Device
* nY = Rigo di inizio stampa
* nX = Colonna di inizio stampa
* nWidth = Spessore del QRCODE - default = 1
* nQRCODE = Stringa del QRCODE
* nColor = Colore del QRCODE - default = CLR_BLACK
* iFlags = Flags
*
* *********************************************************

******************************************************************
Function EanQRCode(oPRN, nY, nX, nWidth, nQRCODE, nColor, iFlags)

   Local hCODE,oBRUSH,nRET
   Local nCLR:=IIF(nColor<>NIL,nColor,CLR_BLACK)
   Local nLineWidth:=IIF(nWidth==NIL .OR. nWidth<1,1,nWidth)
   Local nLineHeight:=nLineWidth
   Local nSCALE:=7.2

   hCODE:=hb_zebra_create_qrcode(nQRCODE,iFlags)

   nY *= nSCALE
   nLineWidth *= nSCALE

   IF hCODE != NIL

      IF hb_zebra_geterror( hCODE ) == 0

         IF Empty( nLineHeight )
            nLineHeight := 16
         ENDIF

         IF hb_zebra_geterror( hCODE ) != 0
            RETURN HB_ZEBRA_ERROR_INVALIDZEBRA
         Endif

         DEFINE BRUSH oBRUSH COLOR nCLR

         nRET:=hb_zebra_draw( hCODE, {|x,y,w,h| oPRN:FillRect({Int(y+.5), Int(x+.5), Int(y+.5)+Int(h)+1, Int(x+.5)+Int(w)},oBRUSH) }, nX*nSCALE, nY, nLineWidth, nLineHeight*nSCALE )

         oBRUSH:End()

      Endif

      hb_zebra_destroy( hCODE )

   Endif

Return nRET
abs.

QR Code

Enviado: 04 Dez 2014 02:36
por Adalberto
Kapiaba, boa noite.

Poderia me dicer qual e a function o comando para DllCall porque em essa linea da erro, noa reconoce esa function.

Aguardo sua ajuda.

Muito obrigado.

[ ] Adalberto

QR Code

Enviado: 04 Dez 2014 04:20
por rochinha
Amiguinhos,
Poderia me dicer qual e a function o comando para DllCall porque em essa linea da erro, noa reconoce esa function.
Tenta la funcion CallDLL().

QR Code

Enviado: 04 Dez 2014 09:48
por Kapiaba
Buenas Adalberto, que usas para compilar tus desarrolos?

Mira este post, porfa:

https://pctoledo.org/forum/viewto ... f=4&t=6009

Gracias, Saludos.

QR Code

Enviado: 04 Dez 2014 14:31
por Adalberto
Kapiaba, buenas tardes.

Muchas gracias por responder y por ayudarme.

Logré generar el código QR de la siguiente manera, y funciona bien.

Código: Selecionar todos

#include 'minigui.ch'
DECLARE DLL_TYPE_HBITMAP FastQRCode (DLL_TYPE_LPCSTR file, DLL_TYPE_LPCSTR path) IN QrCodeLib.dll
//
[b]Function QrCodigo()[/b]
cTexto:= '3188075019|120.54|22/04/2014' // Cualquier texto
cFile:= "facturaqr.bmp" // Puede ser [U:][ruta]<Arquivo.Ext>
FastQRCode(cTexto, cFile)
RETURN NIL
Como puedes ver amigo kapiaba, estoy trabajando con MiniGuiExt Ver. 2.3.3

Imprimo con DosPrinter, pregunto: hay alguna otra menera de imprimir? tal vez con con los comandos propios del lenguaje?

Espero tu respuesta, un atento saludo desde Santa Cruz de la Sierra - Bolivia.

[ ] Adalberto

QR Code

Enviado: 04 Dez 2014 14:38
por Kapiaba
Lástima no saber MiniGUI.

Yo sólo entiendo de FiveWin.

Esperemos que las personas que usan MiniGUI Puedan Ajudarte

Gracias, Saludos.

QR Code

Enviado: 04 Dez 2014 16:48
por rochinha
Amiguinho,

A classe DOSPrint e a classe tDOSPrn es Puramente texto, trabalhando em baixo nível. talvez devesse USAR outras classes com Modo gráfico.

Talvez devas USAR a classe win32prn, mas ela faz parte xHarbour e não sei se Funciona bem no Harbour.

Veja exemplos de uso da classe win32prn:

Primeiro

Segundo

Exemplo simples de uso da classe:

Código: Selecionar todos

#define SALTO_PAGINA chr(12)

********************************
FUNCTION Imprime( cArq, tamrel ) // arquivo e tamanho da linha
********************************
   local cTexto, nLinhas, nA, cLinha, oPrinter := win32prn()

   oPrinter:New( GetDefaultPrinter() )
   oPrinter:Landscape := .F.
   oPrinter:FormType  := 9
   oPrinter:Copies    := 1

   if !oPrinter:Create()
      Alert("Não foi possível criar a impressão")
      return NIL
   endif
   if ! oPrinter:StartDoc("Impressao xharbour")
      Alert("StartDoc() - falhou ")
      return NIL
   endif
   oPrinter:SetDefaultFont()
   if tamrel > 80
      oPrinter:setfont(,,17,,,,255)
   else
      oPrinter:setfont(,,11,,,,255)
   endif

   oPrinter:TextOut( space(tamrel), .T. )
   cTexto  := memoread( cArq )
   nLinhas := mlcount( cTexto, tamrel, 1, .F. )
   for nA := 1 to nLinhas
      cLinha := memoline( cTexto, tamrel, nA, 1, .F. )
      if left( alltrim( cLinha ), 1 ) == SALTO_PAGINA
         oPrinter:NewPage()
      else
         oPrinter:TextOut( cLinha, .T. )
      endif
   next
   oPrinter:EndDoc()
   oPrinter:Destroy()
RETURN NIL

QR Code

Enviado: 04 Dez 2014 17:50
por Adalberto
Maestro rochinha, boa tarde.

Muchas gracias por la ayuda, en verdad no me expresé bien, estoy usando para imprimir el DosPrinter de Bojan Banko, tambien imprime gráficos, es muy bueno pero no deja de ser un software externo a nuestros sistemas, entonces pensé que puedo empezar a estudiar el uso de comandos internos.

Estudiaré los ejemplos que me has propuesto.

Ahora, tal vez puedas ayudarme o quizas tengo que abrir otro post:

Como se hace para saber todos los parametros que podemos pasarle a un archivo .DLL, por ejemplo como podría decirle a QRCodeLib.DLL que trabaje con el nivel H.
(Capacidad de corrección de errores).

Gracias!!!, continuaré en oración pidiendo prosperidad y salud para todos ustedes.

[ ] Adalberto