Jump to content
Fivewin Brasil

oribeiro

Membros
  • Posts

    1,291
  • Joined

  • Last visited

  • Days Won

    35

Status Replies posted by oribeiro

  1. Ola Ribeiro. Vi alguns comentarios de voce la no forum, tentanto gerar um codigo QR.

    Tentei de todas as formas. Voce pode me dar alguma dica ?

    Obrigado

     

    1. oribeiro

      oribeiro

      Achei esse código, veja se funciona: ( Ele depende da Biblioteca gratuita da ZEBRA ). Você pode encontrá-la na internet.

         // CODIGO QRCODE//
         local cCode   := "20219719443 | 01 | F001 | 00045256 | 25/01/2018 | 18.00 | 118.00 | 6 | 10087302682 |" +CHR(13)+CHR(10)+ "Gerado no OASySItu.Com"
         local nWidth  := 0
         local nHeight := 0
         local nX      := 18
         local nY      := 18
         local oX      := 11
         local oY      := 11
         local hBrush
         local hZebra
         local oFontText
         local oPrn
         local oBmp, hBmp, hBrush1, hBrush2, hGraf
      
         // CRIA QRCODE  //
         hBrush    := CreateSolidBrush( 0 )
         hZebra    := hb_Zebra_Create_Qrcode( cCode, NIL )
      
         // PRINT QRCODE //
         DEFINE FONT oFontText NAME "Calibri" SIZE 0, -11
         PRINT oPrn NAME "Imprimir QrCode" PREVIEW
         PAGE
            // imprime o QRCode //
            hb_zebra_draw( hZebra, { | x, y, w, h | nWidth := x + w, nHeight := y + h, FillRect( oPrn:hDCOut, { y, x, y + h, x + w }, hBrush ) }, nX, nY, oX, oY )
            // imprime o Texto  //
            oFontText:Activate( oPrn:hDCOut )
            DrawText( oPrn:hDCOut, cCode, { nHeight + 10, nX - 4, nHeight + 24, nWidth + 4 }, 0 )
            oFontText:DeActivate( oPrn:hDCOut )
         ENDPAGE
         ENDPRINT
         oFontText:End()
      
         // SAVE BMP-PNG //
         hBrush1   := GdiPlusNewSolidBrush( 255, 255, 255, 255 )
         hBrush2   := GdiPlusNewSolidBrush( 255,   0,   0,   0 )
         oBmp      := GdiBmp():New()
         hBmp      := GdiPlusBmpFromBrush( nWidth + nX, nHeight + nY, hBrush1 )
         hGraf     := GdiPlusHGraFFromHBmp( hBmp )
         hb_zebra_draw( hZebra, { | x, y, w, h | GdiPlusDrawRect( hGraf, , hBrush2, x, y, w, h ) }, nX, nY, oX - 0.5, oY - 0.5 )
         oBmp:hBmp := hBmp
         GdiPlusDeleteGraphics( hGraf )
         GdiPlusDeleteBrush( hBrush2  )
         GdiPlusDeleteBrush( hBrush1  )
         oBmp:Save( "QRCODE.PNG" )
         oBmp:End()

       

    2. (See 5 other replies to this status update)

  2. Ola Ribeiro. Vi alguns comentarios de voce la no forum, tentanto gerar um codigo QR.

    Tentei de todas as formas. Voce pode me dar alguma dica ?

    Obrigado

     

    1. oribeiro

      oribeiro

      Só consegui gerando um bitmap mesmo. Não sei fazer de outro modo.

      Mas essa rotina gera um BITMAP, importa-o para a memória e o apaga no disco, daí, com ele na memória é possível imprimir ou mostrar na tela como faz esse exemplo.

    2. (See 5 other replies to this status update)

  3. Ola Ribeiro. Vi alguns comentarios de voce la no forum, tentanto gerar um codigo QR.

    Tentei de todas as formas. Voce pode me dar alguma dica ?

    Obrigado

     

    1. oribeiro

      oribeiro

      Consegui com esse código:

      * CodeQR.prg
      * 08/03/2018
      * Programa para gerar código QR

      #include "fivewin.ch"

      /* CODEBAR.CH
      #include "hbzebra.ch"
      #define CODEBAR_EAN13          1
      #define CODEBAR_EAN8           2
      #define CODEBAR_UPCA           3
      #define CODEBAR_UPCE           4
      #define CODEBAR_ITF            5
      #define CODEBAR_MSI            6
      #define CODEBAR_CODABAR        7
      #define CODEBAR_CODE11         8
      #define CODEBAR_CODE39         9
      #define CODEBAR_CODE93         10
      #define CODEBAR_CODE128        11
      #define CODEBAR_PDF417         12
      #define CODEBAR_DATAMATRIX     13
      #define CODEBAR_TYPE           1
      #define CODEBAR_BLOCK          2
      #define CODEBAR_QRCODE         14
      #define DEFAULT_CODEBAR        CODEBAR_PDF417
      */

      Function TesteCodeQR()
         Local oCode
         Local hDC, hBmp
         Local oPrn, hDib
         oCode:=TCodeBars():New( 500, 500 )
         oCode:Reset()           // Reset
         oCode:nHeightCode = 10  // altura  -> 7.23 PAGINA CHEIA
         oCode:nWidthCode  = 10  // Largura -> 7.23 PAGINA CHEIA
         oCode:SetType( 14 )     // CODEBAR_QRCODE
         oCode:SetCode( "Oscar Batista Ribeiro Neto e Marina BATISTA Ribeiro casaram-se no dia quatorze de julho de dois mil e dezessete e viverão felizes para sempre." ) // ( "35141146377222003730599000004630001158179941|20141105134922|10.00|61694805808|m+4o8FY1lig1zcy6VU3t7INVwE6kiA/ykLXKDFZfb9gu0g4wl3Fk2HYaRhSt8G+yk9mP/R65m3R7V2IO8CxnmO1oVtlamB6UKA+UZZqDNEqtYlhQzLySNzMG0thaNMZsq5RxmQ3eQLPw8LLez3MqWvUveFXNSSq6AGEX2+KOdavteo3K2L06SQoVIjwkmcgRzqhfHP3y8t2wfr1nw/WAnaCF9ZY/K4dTykk3hsXcan/MKCTBlcSOhNgSh3sdsQHpl2w2tmbLBsYBLFkuvKlwzHarNJQ1RfRznGdojHglQH1KVtbAUXKke54pdRt3JL7nJlR+Lbmtd2tjcT2vRyTepw==" ) // Texto para gerar o QRCode
         oCode:SetFlags( 0 )     // Não sei o que é
         oCode:Build()           // Cria o código
         *
         hDib := DibFromBitmap( oCode:hCodeBar )
         DibWrite( "QRCODE.BMP" , hDib )  // Grava arquivo BMP no disco
         *
         hDC  := oWnd:GetDC()
         hBmp := ReadBitmap( 0, "QRCODE.BMP" )
         DEFINE DIALOG oDlgQR FROM 0,0 TO 20,40
         ACTIVATE DIALOG oDlgQR ON PAINT DrawBitmap( hDC, hBmp, 0, 0, 300, 300 ) CENTER
         Erase("QRCODE.BMP")
         /*
         PRINT oPrn NAME "Imprimir QrCode" PREVIEW
         PAGE
            Drawbitmap( oPrn:hDCOut, oCode:hCodeBar, 500, 500)
            *oPrn:SayImage( 100, 100, oCode:hCodeBar, 300, 300 )
            oPrn:SayBitmap( 1, 1, oCode:hCodeBar, 300, 300 )
            oPrn:SayBitmap( 1, 1, ReadBitmap(0,"QRCODE.BMP"), 300, 300 )
         ENDPAGE
         ENDPRINT
         */
         oCode:End()             // Encerra TCodeBar()
      Return nil

      //--------------------------------------//
      CLASS TCodeBars
         DATA aTypes HIDDEN
         DATA cCode
         DATA nFlags
         DATA hCodeBar
         DATA hData
         DATA nType, nWidth, nHeight, nWidthCode, nHeightCode
         METHOD New()
         METHOD End()     INLINE  DeleteObject( ::hCodeBar ),  If( ::hData != NIL, hb_zebra_destroy( ::hData ), )
         METHOD DefError( nError )
         METHOD SetCode( cCode )
         METHOD SetFlags( nFlags )
         METHOD SetType( cnType )
         METHOD Reset()   INLINE ::End()
         METHOD Build()
         METHOD Rebuild() INLINE ::Reset(), ::Build()
      ENDCLASS

      //--------------------------------------//
      METHOD New( nWidth, nHeight, nWidthCode, nHeightCode, cnType, cCode, nFlags ) CLASS TCodeBars
         DEFAULT nWidth := 200,;
                 nHeight := 100,;
                 nWidthCode := 1,;
                 nHeightCode := 3
         ::aTypes = { { "EAN13"      , {| | hb_zebra_create_ean13( ::cCode, ::nFlags )      } },;
                      { "EAN8"       , {| | hb_zebra_create_ean8( ::cCode, ::nFlags )       } },;
                      { "UPCA"       , {| | hb_zebra_create_upca( ::cCode, ::nFlags )       } },;
                      { "UPCE"       , {| | hb_zebra_create_upce( ::cCode, ::nFlags )       } },;
                      { "ITF"        , {| | hb_zebra_create_itf( ::cCode, ::nFlags )        } },;
                      { "MSI"        , {| | hb_zebra_create_msi( ::cCode, ::nFlags )        } },;
                      { "CODABAR"    , {| | hb_zebra_create_codabar( ::cCode, ::nFlags )    } },;
                      { "CODE11"     , {| | hb_zebra_create_code11( ::cCode, ::nFlags )     } },;
                      { "CODE39"     , {| | hb_zebra_create_code39( ::cCode, ::nFlags )     } },;
                      { "CODE93"     , {| | hb_zebra_create_code93( ::cCode, ::nFlags )     } },;
                      { "CODE128"    , {| | hb_zebra_create_code128( ::cCode, ::nFlags )    } },;
                      { "PDF417"     , {| | hb_zebra_create_pdf417( ::cCode, ::nFlags )     } },;
                      { "DATAMATRIX" , {| | hb_zebra_create_datamatrix( ::cCode, ::nFlags ) } },;
                      { "QRCODE"     , {| | hb_zebra_create_qrcode( ::cCode, ::nFlags )     } } }
         ::nWidth  = nWidth
         ::nHeight = nHeight
         ::nWidthCode  = nWidthCode
         ::nHeightCode = nHeightCode
         ::SetType( cnType )
         ::SetCode( cCode )
         ::SetFlags( nFlags )
      return Self

      //--------------------------------------//
      METHOD Build() CLASS TCodeBars
         local hBmpOld
         local hDCDesk := GetDC( GetDesktopWindow() )
         local hDCMem  := CreateCompatibleDC( hDCDesk )
         local hBrush  := CreateSolidBrush( 0 )
         local hBack   := CreateSolidBrush( CLR_WHITE )
         ::hCodeBar = CreateCompatibleBitMap( hDCDesk, ::nWidth, ::nHeight )
         hBmpOld    = SelectObject( hDCMem, ::hCodeBar )
         ::hData := Eval( ::aTypes[ ::nType ][ 2 ] ) // [ CODEBAR_BLOCK ]
         ::DefError()
         FillRect( hDCMem, { 0, 0, ::nHeight, ::nWidth }, hBack )
         hb_zebra_draw( ::hData, {| x, y, w, h | FillRect( hDCMem, { y, x, y +  h, x + w }, hBrush ) }, 0, 0, ::nWidthCode, ::nHeightCode )
         //DrawText( hDCMem, ::cCode, { ::nHeight - 15, 0, ::nHeight, ::nWidth }, 1 )
         SelectObject( hDCMem, hBmpOld )
         ReleaseDC( GetDesktopWindow(), hDCDesk )
         DeleteDC( hDCMem )
         DeleteObject( hBrush )
         DeleteObject( hBack )
      return NIL

      //--------------------------------------//
      METHOD SetCode( cCode ) CLASS TCodeBars
         if ! Empty( cCode )
            if ValType( cCode ) != "C"
               cCode = cValToChar( cCode )
            endif
            ::cCode = cCode
         endif
      return NIL

      //--------------------------------------//
      METHOD SetFlags( nFlags ) CLASS TCodeBars
         ::nFlags = nFlags
      return NIL

      //--------------------------------------//
      METHOD SetType( cnType ) class TCodeBars
         local cType
         if ( ( cType := ValType( cnType ) )$"CN" )
            if cType == "N"
               if cnType > 0 .and. cnType < 15
                  ::nType = cnType
               endif
            else
               ::nType = AScan( ::aTypes, {| a | a[ 1 ] == Upper( cnType ) } ) // [ CODEBAR_TYPE ]
            endif
         else
            ::nType = 12 // DEFAULT_CODEBAR
         endif
      return NIL

      //--------------------------------------//
      METHOD DefError( ) CLASS TCodeBars
         local oError
         local nError := 0
         if ::hData != NIL
            nError = hb_zebra_geterror( ::hData )
         endif
         if nError != 0
            hb_zebra_destroy( ::hData )
            oError := ErrorNew()
            oError:SubSystem   = "TCODEBARS"
            oError:SubCode     = nError
            oError:Severity    = 2
            Eval( ErrorBlock(), oError )
         endif
      RETURN nil

      //--------------------------------------//
      #pragma BEGINDUMP
         #include <hbapi.h>
         #include <windows.h>
         HB_FUNC( CREATECOMPATIBLEBITMAP ) // hDC, nWidth, nHeight
         {
            hb_retnl( ( LONG ) CreateCompatibleBitmap( ( HDC ) hb_parnl( 1 ), hb_parnl( 2 ), hb_parnl( 3 ) ) );
         }
      #pragma ENDDUMP

      *Eof( CodeQR.Prg )

    2. (See 5 other replies to this status update)

×
×
  • Create New...