problema con DrawBitmap() usando tCodeBars
problema con DrawBitmap() usando tCodeBars
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
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
- Enrico Maria Giordano
- Posts: 8738
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Has thanked: 1 time
- Been thanked: 2 times
- Contact:
Re: problema con DrawBitmap() usando tCodeBars
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
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
- Enrico Maria Giordano
- Posts: 8738
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Has thanked: 1 time
- Been thanked: 2 times
- Contact:
Re: problema con DrawBitmap() usando tCodeBars
Desculpa, eso que necesito es un ejemplo completo y minimo.
EMG
EMG
Re: problema con DrawBitmap() usando tCodeBars
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
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
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
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
Aclaro...
la imagen en negro es en la impresión... usando la oPrn:PrintImage que usa FW_DrawImage...
Salu2
la imagen en negro es en la impresión... usando la oPrn:PrintImage que usa FW_DrawImage...
Salu2
- karinha
- Posts: 7928
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: problema con DrawBitmap() usando tCodeBars
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
- nageswaragunupudi
- Posts: 10721
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 8 times
- Contact:
Re: problema con DrawBitmap() usando tCodeBars
Code: Select all | Expand
#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
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: problema con DrawBitmap() usando tCodeBars
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
Si alguien sabe que puede afectar la libreria sería importante que lo comente en el foro.
Saludos
- nageswaragunupudi
- Posts: 10721
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 8 times
- Contact:
Re: problema con DrawBitmap() usando tCodeBars
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.
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
G. N. Rao.
Hyderabad, India