con una clase que encontre en el foro, genero un QR con información (que entre mas caracteres tiene es mas grande el QR), el cual lo imprimo en el preview
pero lo simpatico de esto es que genera un archivo BMP y este puede ser puesto en unrecurso "IMAGE" y te puede ayudar a lo que necesitas.
Code: Select all
#Include "FiveWin.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_QRCODE 14
#define CODEBAR_TYPE 1
#define CODEBAR_BLOCK 2
#define DEFAULT_CODEBAR CODEBAR_PDF417
//--------------------------------------
CREATE 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" , {| | NIL /*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
//------------------------------------------------
Code: Select all
cCodeBar := "entre mas letras o caracteres tenga es mas grande"
oQRCode:= TCodeBars():New( 421, 421, 10, 10, CODEBAR_QRCODE, cCodeBar )
oQRCode:Build()
GeneraCodigo_QR( oQRCode )
PRINTER oPrn NAME "Tarja Pallet" PREVIEW
PAGE
...
...
oPrn:SayImage(4800, 3500 , "..\QrCode.bmp",1200,1200 )
...
...
ENDPAGE
ENDPRINT
//----------------------------------------------------------------------
Function GeneraCodigo_QR( oCode )
Local hDib
If ( File( ..\QrCode.bmp" ), Ferase( ..\QrCode.bmp" ), )
hDib := DibFromBitmap( oCode:hCodeBar )
DibWrite( "..\QrCode.bmp", hDib )
GloBalFree( hDib )
Return nil
//----------------------------------------------------------------------
1.