Page 1 of 1

problema con DrawBitmap() usando tCodeBars

PostPosted: Sun Mar 14, 2021 10:49 pm
by rterraz
Amigos
Estoy usando la clase TCodeBars con hbzebra.lib en Harbour para generar códigos de barras tipo QR.
Hasta hace unos días funcionaba sin problemas, usando Drawbitmap( oPrn:hDCOut, oCode:hCodeBar, aRect[1],aRect[2]) los insertaba en una rutina oPrn.
Se veían e imprimian a la perfección, hace 2 días sin ninguna explicación ( al menos para mi ) dejaron de funcionar ( no se ven mas en el preview y tampoco se imprimen ).
Revise todo el codigo y esta igual que antes, no se que puede haber pasado, uso windows10 y hubo un actualizacion , puede ser que haya cambiado algo en windows ???
No se como resolverlo y me es imprescindible seguir imprimiendo los codigos en las facturas electronicas.
Antes de pensar en cambiar la forma en que hago los QR espero que alguno de ustedes me ilumine !!!!
Saludos a todos

Re: problema con DrawBitmap() usando tCodeBars

PostPosted: Mon Mar 15, 2021 8:46 am
by Enrico Maria Giordano
Puedes compartir un ejemplo minimo?

EMG

Re: problema con DrawBitmap() usando tCodeBars

PostPosted: Mon Mar 15, 2021 12:02 pm
by rterraz
Hola Enrico
aca te paso un sample de lo que estoy haciendo aver si a vos te funciona !

asi llamo a la funcion del codigo QR desde la rutina de impresion

nRow+=nRowStep
oPrn:say(nRow,nMargen, replicate('-',45),oFont1)
nRow+=nRowStep

//..Genera QR llamando a TcodeBars )
BuildQR(oPrn, nRow,nMargen ,cCodBar ) // cCodbar trae la data a incluir en el QR

ENDPAGE
ENDPRINT

//............................................
FUNCTION BuildQR( oPrn ,nRow,nCol,cCode )

local nFlags := 0
local nCode := 14 // codigo para el CODEBARQR

oCode := TCodeBars():New(600,600,10,10,nCode,cCode,0)
oCode:Reset()
oCode:Build()

Drawbitmap( oPrn:hDCOut, oCode:hCodeBar, nRow,nCol) // aca deberia dibujar el QR hace unos dias lo hacia pero ahora no

RETU oCode

esta es la clase TCodeBars de Garcia GIl que estoy usando hace mucho sin problemas hasta ahora
/////// CLASS TCODEBARS //////////////////////

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
nFlags := 0


::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 ][ 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[ CODEBAR_TYPE ] == Upper( cnType ) } )
endif
else
::nType = 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

Re: problema con DrawBitmap() usando tCodeBars

PostPosted: Mon Mar 15, 2021 1:02 pm
by Enrico Maria Giordano
Desculpa, eso que necesito es un ejemplo completo y minimo.

EMG

Re: problema con DrawBitmap() usando tCodeBars

PostPosted: Mon Mar 15, 2021 8:38 pm
by rterraz
disculpen!
El problema es con mi PC o con el Preview de FWH porque corro la misma funcion en otra pc y anda bien, evidentemente algo se rompio en el sistema operativo o en el Preview.
Saludos

Re: problema con DrawBitmap() usando tCodeBars

PostPosted: Mon Mar 15, 2021 9:15 pm
by evallejo
Buenas
Creo que el problema es con la última actualizacion de Windows 10... a mi me ha dado problemas con el FW_DrawImage...
Justo desde el viernes a sábado que mi PC entro en la actualizacion de Windows... despues ya no muestra las imagenes (solo un recuadro negro) de ahi tengo el reporte de 2 clientes con ese problema

A ver si alguien nos da una manito ... por el momento recurri a otras funciones para salir del paso (funciones de GDIBmp...)

Gracias

Re: problema con DrawBitmap() usando tCodeBars

PostPosted: Mon Mar 15, 2021 9:29 pm
by evallejo
Aclaro...
la imagen en negro es en la impresión... usando la oPrn:PrintImage que usa FW_DrawImage...

Salu2

Re: problema con DrawBitmap() usando tCodeBars

PostPosted: Mon Mar 15, 2021 10:00 pm
by karinha

Re: problema con DrawBitmap() usando tCodeBars

PostPosted: Wed Mar 17, 2021 8:34 am
by nageswaragunupudi
Code: Select all  Expand view
#include "fivewin.ch"

REQUEST FWZEBRA  // required for barcodes

function Main()

   local oPrn, cText

   cText    := MEMOREAD( cFileSetExt( ExeName(), "prg" ) )

   PRINT oPrn PREVIEW
   PAGE
   @ 2,2 PRINT TO oPrn TEXT cText AS BARCODE TYPE "QR" SIZE 2,2 INCHES
   ENDPAGE
   ENDPRINT

return nil
 


Image

Re: problema con DrawBitmap() usando tCodeBars

PostPosted: Thu Mar 25, 2021 11:19 am
by infosys
Buen día, tengo el mismo problema que ustedes, en algunas computadoras dejo de mostrar los codigos de barras generados con la libreria hbzebra, en cambio si genero codigos sin esa libreria, funcionan bien, aparentemente una actualizacion de windows fue la que creo ese problema, no he logrado detectar cual fue, pero ocurre en algunas pc, en otras no.
Si alguien sabe que puede afectar la libreria sería importante que lo comente en el foro.
Saludos

Re: problema con DrawBitmap() usando tCodeBars

PostPosted: Thu Mar 25, 2021 11:32 am
by nageswaragunupudi
The problem was with some Windows 10 updates.
The problem is completely solved by the windows fix KB5001649.
Please see
viewtopic.php?f=3&t=40088
for full details.