problema con DrawBitmap() usando tCodeBars

problema con DrawBitmap() usando tCodeBars

Postby rterraz » Sun Mar 14, 2021 10:49 pm

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
User avatar
rterraz
 
Posts: 182
Joined: Wed Nov 08, 2006 11:44 pm
Location: Argentina


Re: problema con DrawBitmap() usando tCodeBars

Postby rterraz » Mon Mar 15, 2021 12:02 pm

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
User avatar
rterraz
 
Posts: 182
Joined: Wed Nov 08, 2006 11:44 pm
Location: Argentina

Re: problema con DrawBitmap() usando tCodeBars

Postby Enrico Maria Giordano » Mon Mar 15, 2021 1:02 pm

Desculpa, eso que necesito es un ejemplo completo y minimo.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8718
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: problema con DrawBitmap() usando tCodeBars

Postby rterraz » Mon Mar 15, 2021 8:38 pm

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
User avatar
rterraz
 
Posts: 182
Joined: Wed Nov 08, 2006 11:44 pm
Location: Argentina

Re: problema con DrawBitmap() usando tCodeBars

Postby evallejo » Mon Mar 15, 2021 9:15 pm

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
evallejo
 
Posts: 13
Joined: Thu Feb 07, 2008 10:09 pm

Re: problema con DrawBitmap() usando tCodeBars

Postby evallejo » Mon Mar 15, 2021 9:29 pm

Aclaro...
la imagen en negro es en la impresión... usando la oPrn:PrintImage que usa FW_DrawImage...

Salu2
evallejo
 
Posts: 13
Joined: Thu Feb 07, 2008 10:09 pm

Re: problema con DrawBitmap() usando tCodeBars

Postby karinha » Mon Mar 15, 2021 10:00 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: problema con DrawBitmap() usando tCodeBars

Postby nageswaragunupudi » Wed Mar 17, 2021 8:34 am

Code: Select all  Expand view  RUN
#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
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: problema con DrawBitmap() usando tCodeBars

Postby infosys » Thu Mar 25, 2021 11:19 am

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
infosys
 
Posts: 59
Joined: Tue Jan 31, 2006 1:32 pm

Re: problema con DrawBitmap() usando tCodeBars

Postby nageswaragunupudi » Thu Mar 25, 2021 11:32 am

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.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 44 guests