Si te refieres a hacer algo así:
@ nCmRow, nCmCol ;
CODE128 ;
"cMiLiteralacodificar" ;
MODE "A" OF oMiObjetoPrinter SIZE 1
Debes añadir a tu programa:
-en la carpeta del include: el CH BARCODE.CH
-y en la carpeta de tus PRG los siguientes: BANNER.PRG, BARLIB.PRG, CODABAR.PRG, CODE3DE9.PRG, CODE128.PRG, EAN13.PRG, GO_CODE.PRG y INT25.PRG
Gentileza de Cayetano.
Code: Select all
BARCODE.CH
==========
#ifndef _BARCODE_
#define _BARCODE_
#translate @ <nRow>, <nCol> CODE128 <cCode> ;
[ MODE <cMode>] ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
Code128( <nRow>, <nCol> , <cCode>, <oPrint>, <cMode> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#translate @ <nRow>, <nCol> CM_CODE128 <cCode> ;
[ MODE <cMode>] ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
c_Code128( <nRow>, <nCol> , <cCode>, <oPrint>, <cMode> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#translate @ <nRow>, <nCol> CODE3_9 <cCode> ;
[ <lCheck:CHECK> ] ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
Code3_9( <nRow>, <nCol> , <cCode>, <oPrint>, <lCheck> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#translate @ <nRow>, <nCol> CM_CODE3_9 <cCode> ;
[ <lCheck:CHECK> ] ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
c_Code3_9( <nRow>, <nCol> , <cCode>, <oPrint>, <lCheck> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#translate @ <nRow>, <nCol> EAN13 <cCode> ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
[ <lBanner:BANNER> ] ;
[ FONT <cFont> ] ;
=> ;
EAN13( <nRow>, <nCol> , <cCode>, <oPrint> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize>,;
<.lBanner.>, <cFont> )
#translate @ <nRow>, <nCol> CM_EAN13 <cCode> ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
[ <lBanner:BANNER> ] ;
[ FONT <cFont> ] ;
=> ;
c_EAN13( <nRow>, <nCol> , <cCode>, <oPrint> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize>,;
<.lBanner.>, <cFont> )
#translate @ <nRow>, <nCol> UPCA <cCode> ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
[ <lBanner:BANNER> ] ;
[ FONT <cFont> ] ;
=> ;
UPCA( <nRow>, <nCol> , <cCode>, <oPrint> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize>,;
<.lBanner.>, <cFont> )
#translate @ <nRow>, <nCol> CM_UPCA <cCode> ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
[ <lBanner:BANNER> ] ;
[ FONT <cFont> ] ;
=> ;
c_UPCA( <nRow>, <nCol> , <cCode>, <oPrint> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize>,;
<.lBanner.>, <cFont> )
#translate @ <nRow>, <nCol> EAN8 <cCode> ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
[ <lBanner:BANNER> ] ;
[ FONT <cFont> ] ;
=> ;
EAN8( <nRow>, <nCol> , <cCode>, <oPrint> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize>,;
<.lBanner.>, <cFont> )
#translate @ <nRow>, <nCol> CM_EAN8 <cCode> ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
[ <lBanner:BANNER> ] ;
[ FONT <cFont> ] ;
=> ;
c_EAN8( <nRow>, <nCol> , <cCode>, <oPrint> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize>,;
<.lBanner.>, <cFont> )
#translate @ <nRow>, <nCol> SUP5 <cCode> ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
[ <lBanner:BANNER> ] ;
[ FONT <cFont> ] ;
[ <lBanner:BANNER> ] ;
[ FONT <cFont> ] ;
=> ;
SUP5( <nRow>, <nCol> , <cCode>, <oPrint> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize>,;
<.lBanner.>, <cFont> )
#translate @ <nRow>, <nCol> CM_SUP5 <cCode> ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
[ <lBanner:BANNER> ] ;
[ FONT <cFont> ] ;
[ <lBanner:BANNER> ] ;
[ FONT <cFont> ] ;
=> ;
c_SUP5( <nRow>, <nCol> , <cCode>, <oPrint> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize>,;
<.lBanner.>, <cFont> )
#translate @ <nRow>, <nCol> CODABAR <cCode> ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
CODABAR( <nRow>, <nCol> , <cCode>, <oPrint> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#translate @ <nRow>, <nCol> CM_CODABAR <cCode> ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
c_CODABAR( <nRow>, <nCol> , <cCode>, <oPrint> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#translate @ <nRow>, <nCol> INT25 <cCode> ;
[ <lCheck:CHECK> ] ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
INT25( <nRow>, <nCol> , <cCode>, <oPrint>, <lCheck> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#translate @ <nRow>, <nCol> CM_INT25 <cCode> ;
[ <lCheck:CHECK> ] ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
c_INT25( <nRow>, <nCol> , <cCode>, <oPrint>, <lCheck> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#translate @ <nRow>, <nCol> IND25 <cCode> ;
[ <lCheck:CHECK> ] ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
IND25( <nRow>, <nCol> , <cCode>, <oPrint>, <lCheck> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#translate @ <nRow>, <nCol> CM_IND25 <cCode> ;
[ <lCheck:CHECK> ] ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
c_IND25( <nRow>, <nCol> , <cCode>, <oPrint>, <lCheck> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#translate @ <nRow>, <nCol> MAT25 <cCode> ;
[ <lCheck:CHECK> ] ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
MAT25( <nRow>, <nCol> , <cCode>, <oPrint>, <lCheck> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#translate @ <nRow>, <nCol> CM_MAT25 <cCode> ;
[ <lCheck:CHECK> ] ;
[ <lVert:VERTICAL> ];
[ COLOR <nColor> ] ;
[ WIDTH <nWidth> ] ;
[ SIZE <nSize> ] ;
[ OF <oPrint>] ;
=> ;
c_MAT25( <nRow>, <nCol> , <cCode>, <oPrint>, <lCheck> ;
,<nColor>, .not. <.lVert.>, <nWidth>, <nSize> )
#ENDIF
Code: Select all
BANNER.PRG
==========
// labels on barcodes
#include "fivewin.ch"
function barlen13(cCode,oPrint,nRow,nCol,Color,lHorz,nWidth,nLen,cFont)
local oFont, nLenChar, l ,Control,k,n,nWidthChar
default lHorz := .t.
default nWidth := 0.025 // 1/3 M/mm
default nLen := 1.5 // Cmm.
default cFont := 'arial'
default Color := CLR_BLACK
k:=left(alltrim(cCode)+'000000000000',12) // padding with '0'
// calculo del digito de control
k:=k+EAN13_CHECK(k) // Chaeck Digit en EAN13
if !lHorz
nWidth :=round ( nWidth * 10 * oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nWidth :=round ( nWidth * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
// Len of bar
if lHorz
nLen :=round ( nLen * 10 * oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nLen :=round ( nLen * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
/*
nLenChar := nWidth*10
nWidthChar:= nLen*0.3
while .t.
define font oFont name cFont of oPrInt size nLenChar , nLenChar/2 ;
nescapement if(lHorz,0,13500)
if oPrint:GetTextWidth( '888888', oFont )<=42*nWidth
// alert(if(lHorz,'H:','V:')+str(nWidth*7)+str(nLenChar/(nWidth*7)))
while .t.
define font oFont name cFont of oPrInt size nLenChar , nWidthChar ;
nescapement if(lHorz,0,13500)
if oPrint:GetTextHeigth( '8', oFont )<=0.2*nLen
alert(if(lHorz,'H:','V:')+str(nLen*0.2)+str(nWidthChar/(nLen*0.2)))
exit
else
nWidthChar-=0.2
end
oFont:end()
enddo
exit
else
nLenChar-=1
end
oFont:end()
end
* nWidt -> 0.8
*/
define font oFont name cFont of oPrInt size nWidth*5.6 , nLen*0.04 ;
nescapement if(lHorz,0,13500)
if lHorz
oPrint:say(nRow+nLen*0.9,nCol-nWidth*8,left(k,1),oFont,,Color)
oPrint:say(nRow+nLen*0.9,nCol+nWidth*3,substr(k,2,6),oFont,,Color)
oPrint:say(nRow+nLen*0.9,nCol+nWidth*50,substr(k,8,6),oFont,,Color)
else
oPrint:say(nRow-nWidth*8,nCol+nLen*0.1,left(k,1),oFont,,Color)
oPrint:say(nRow+nWidth*3,nCol+nLen*0.1,substr(k,2,6),oFont,,Color)
oPrint:say(nRow+nWidth*50,nCol+nLen*0.1,substr(k,8,6),oFont,,Color)
end
release oFont
return nil
function barlen(cCode,nDigs,oPrint,nRow,nCol,Color,lHorz,nWidth,nLen,cFont)
local oFont, nLenChar, l ,Control,k,s1,s2,n, Izda, dCha
default lHorz := .t.
default nWidth := 0.025 // 1/3 M/mm
default nLen := 1.5 // Cmm.
default cFont := 'arial'
default Color := CLR_BLACK
default nDigs := 11
// calculo del digito de control
k:=left(alltrim(cCode)+'000000000000',nDigs) // padding with '0'
// calculo del digito de control
k=k+Upc_CHECK(cCode,nDigs) // cCode,nLen
nDigs++
dcha:=Right(K,nDigs/2)
izda:=Left(k,nDigs/2)
if !lHorz
nWidth :=round ( nWidth * 10 * oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nWidth :=round ( nWidth * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
// Len of bar
if lHorz
nLen :=round ( nLen * 10 * oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nLen :=round ( nLen * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
define font oFont name cFont of oPrInt size nWidth*5.6 , nLen*0.04 ;
nescapement if(lHorz,0,13500)
// fisrt letter
if lHorz
oPrint:say(nRow+nLen*0.9,nCol+nWidth*3,Izda,oFont,,Color)
oPrint:say(nRow+nLen*0.9,nCol+nWidth*(int(nDigs)/2*7+8),dcha,oFont,,Color)
else
oPrint:say(nRow+nWidth*3,nCol+nLen*0.1,izda,oFont,,Color)
oPrint:say(nRow+nWidth*(nDigs/2+8),nCol+nLen*0.1,dcha,oFont,,Color)
end
release oFont
return nil
function ban5(cCode,oPrint,nRow,nCol,Color,lHorz,nWidth,nLen,cFont)
local oFont, nLenChar, k,n, oPen
default lHorz := .t.
default nWidth := 0.025 // 1/3 M/mm
default nLen := 1.5 // Cmm.
default cFont := 'arial'
default Color := CLR_BLACK
ccode:=left(alltrim(cCode)+'000000000000',5) // padding with '0'
if !lHorz
nWidth :=round ( nWidth * 10 * oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nWidth :=round ( nWidth * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
// Len of bar
if lHorz
nLen :=round ( nLen * 10 * oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nLen :=round ( nLen * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
define font oFont name cFont of oPrInt size nWidth*5.6 , nLen*0.04 ;
nescapement if(lHorz,0,13500)
define pen oPen color CLR_WHITE of oPrint
k:=''
for n:=1 to 4
k+=substr(cCode,n,1)+ ' '
end
cCode := k+right(cCOde,1)
if lHorz
oPrint:box(nrow,ncol,nrow+nLen*.3,nCol+48*nWidth,oPen)
else
oPrint:box(nrow,ncol,nrow+41*nWidth,nCol+nLen*.3+48*nWidth,oPen)
end
oPrint:say(nRow,nCol,cCode,oFont,,Color)
release oFont
release oPen
return nil
function UPCA_barlen(cCode,oPrint,nRow,nCol,Color,lHorz,nWidth,nLen,cFont)
local oFont, nLenChar, l ,Control,k,n, Izda, dCha, nDigs:=11,oFont2
default lHorz := .t.
default nWidth := 0.025 // 1/3 M/mm
default nLen := 1.5 // Cmm.
default cFont := 'arial'
default Color := CLR_BLACK
// calculo del digito de control
k:=left(alltrim(cCode)+'000000000000',nDigs) // padding with '0'
// calculo del digito de control
k=k+Upc_CHECK(cCode,nDigs) // cCode,nLen
nDigs++
dcha:=Right(K,nDigs/2)
izda:=Left(k,nDigs/2)
if !lHorz
nWidth :=round ( nWidth * 10 * oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nWidth :=round ( nWidth * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
// Len of bar
if lHorz
nLen :=round ( nLen * 10 * oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nLen :=round ( nLen * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
define font oFont name cFont of oPrInt size nWidth*5.6 , nLen*0.04 ;
nescapement if(lHorz,0,13500)
define font oFont2 name cFont of oPrInt size nWidth*5.6 , nLen*0.025 ;
nescapement if(lHorz,0,13500)
// fisrt letter
if lHorz
oPrint:say(nRow+nLen*0.9,nCol-nWidth*8,left(k,1),oFont2,,Color)
oPrint:say(nRow+nLen*0.9,nCol+nWidth*10,right(Izda,5),oFont,,Color)
oPrint:say(nRow+nLen*0.9,nCol+nWidth*50,left(dcha,5),oFont,,Color)
oPrint:say(nRow+nLen*0.9,nCol+nWidth*95,right(k,1),oFont2,,Color)
else
oPrint:say(nRow-nWidth*8,nCol+nLen*0.1,left(k,1),oFont2,,Color)
oPrint:say(nRow+nWidth*10,nCol+nLen*0.1,right(izda,5),oFont,,Color)
oPrint:say(nRow+nWidth*50,nCol+nLen*0.1,left(dcha,5),oFont,,Color)
oPrint:say(nRow+nWidth*95,nCol+nLen*0.1,right(k,1),oFont2,,Color)
end
release oFont
release oFont2 //Afegit 27/05/2010 C.Gelabert
return nil
Code: Select all
BARLIB.PRG
==========
// funciones de llamadas de barlib
// chequean las posibles concordancias de datos
// y dan los errores
#include 'fivewin.ch'
// CODE 128
/*
Code 128:
Admite los 128 caracteres 0 - 127
si s¢lo son n£meros se usa un modelo comprimido, llamado
modo C
Si hay caracteres < 32 se usa el m¢do A
Si hay caracteres en minusculas se usa el modo B ( modo por defecto)
Los modos se mezclan
Sintaxis :
code128(nRow,nCol,cCode,oPrint,[cMode],[Color],
[lOrientacion],[nAncho],[nAlto])
nRow, nCol en Prixels
nAncho,nAlto en Cm
*/
Function Code128(nRow,nCol,cCode,oPrint,cMode,Color,lHorz,nWidth,nHeigth)
// test de parametros
// por implementar
go_code(_code128(cCode,cMode),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth)
return nil
Function c_Code128(nRow,nCol,cCode,oPrint,cMode,Color,lHorz,nWidth,nHeigth)
oPrint:Cmtr2Pix(@nRow, @nCol)
return Code128(nRow,nCol,cCode,oPrint,cMode,Color,lHorz,nWidth,nHeigth)
Function Code3_9(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
// test de parametros
// por implementar
go_code(_code3_9(cCode,lCheck),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth)
return nil
Function c_Code3_9(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
oPrint:Cmtr2Pix(@nRow, @nCol)
return Code3_9(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
Function ean13(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth,;
lBanner,cFont)
local nLen
// test de parametros
// por implementar
default nHeigth := 1.5
default lBanner:=.f.
// desplazamiento...
if lHorz
go_code(_ean13(cCode),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth*0.90)
else
nLen :=round ( nHeigth * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )*0.1
// 10% espacios
go_code(_ean13(cCode),nRow,nCol+nLen,oPrint,lHorz,Color,nWidth,nHeigth*0.90)
end
go_code(_ean13Bl(),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth)
if lBanner
barlen13(cCode,oPrint,nRow,nCol,Color,lHorz,nWidth,nHeigth,cFont)
end
return nil
Function c_ean13(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
oPrint:Cmtr2Pix(@nRow, @nCol)
return ean13(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
Function UPCA(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth,lBanner,cFont)
local nLen
// test de parametros
// por implementar
default nHeigth := 1.5
default lBanner:=.f.
if lHorz
go_code(_UPC(cCode),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth*0.90)
else
nLen :=round ( nHeigth * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )*0.1
// 10% espacios
go_code(_UPC(cCode),nRow,nCol+nLen,oPrint,lHorz,Color,nWidth,nHeigth*0.90)
end
go_code(_UPCABl(cCode),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth)
if lBanner
UPCA_barlen(cCode,oPrint,nRow,nCol,Color,lHorz,nWidth,nHeigth,cFont)
end
return nil
Function c_UPCA(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
oPrint:Cmtr2Pix(@nRow, @nCol)
return UPCA(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
Function ean8(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth,lBanner,cFont)
local nLen
// test de parametros
// por implementar
default nHeigth := 1.5
default lBanner:=.f.
if lHorz
go_code(_UPC(cCode,7),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth*0.90)
else
nLen :=round ( nHeigth * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )*0.1
// 10% espacios
go_code(_UPC(cCode,7),nRow,nCol+nLen,oPrint,lHorz,Color,nWidth,nHeigth*0.90)
end
go_code(_ean13Bl(8),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth)
if lBanner
barlen(cCode,7,oPrint,nRow,nCol,Color,lHorz,nWidth,nHeigth,cFont)
end
return nil
Function c_ean8(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
oPrint:Cmtr2Pix(@nRow, @nCol)
return ean8(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
Function sup5(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth,lBanner,cFOnt)
// test de parametros
// por implementar
go_code(_sup5(cCode),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth)
if lBANNER
ban5(cCode,oPrint,nRow,nCol,Color,lHorz,nWidth,nhEIGTH,cFont)
end
return nil
Function c_Sup5(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth,lBanner,cFont)
oPrint:Cmtr2Pix(@nRow, @nCol)
return sup5(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth,lBanner,cFont)
Function Codabar(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
// test de parametros
// por implementar
go_code(_Codabar(cCode),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth)
return nil
Function c_Codabar(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
oPrint:Cmtr2Pix(@nRow, @nCol)
return Codabar(nRow,nCol,cCode,oPrint,Color,lHorz,nWidth,nHeigth)
Function int25(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
// test de parametros
// por implementar
go_code(_int25(cCode,lCheck),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth)
return nil
Function c_int25(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
oPrint:Cmtr2Pix(@nRow, @nCol)
return int25(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
Function ind25(nRow,nCol,cCode,oPrind,lCheck,Color,lHorz,nWidth,nHeigth)
// test de parametros
// por implementar
go_code(_ind25(cCode,lCheck),nRow,nCol,oPrind,lHorz,Color,nWidth,nHeigth)
return nil
Function c_ind25(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
oPrint:Cmtr2Pix(@nRow, @nCol)
return ind25(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
Function mat25(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
// test de parametros
// por implementar
go_code(_mat25(cCode,lCheck),nRow,nCol,oPrint,lHorz,Color,nWidth,nHeigth)
return nil
Function c_mat25(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
oPrint:Cmtr2Pix(@nRow, @nCol)
return mat25(nRow,nCol,cCode,oPrint,lCheck,Color,lHorz,nWidth,nHeigth)
Code: Select all
CODABAR.PRG
===========
// codabar system
static abar:={"101010001110",;
"101011100010",;
"101000101110",;
"111000101010",;
"101110100010",;
"111010100010",;
"100010101110",;
"100010111010",;
"100011101010",;
"111010001010",;
"101000111010",;
"101110001010",;
"11101011101110",;
"11101110101110",;
"11101110111010",;
"10111011101110",;
"10111000100010",;
"10001000101110",;
'10100011100010',;
'10111000100010',;
'10001000101110',;
'10100010001110',;
'10100011100010'}
static cChar :='0123456789-$:/.+ABCDTN*E'
// importante, this system not test de start /end code.
function _codabar( cCode )
local n, cBarra := '', nCar
cCode := upper( cCode )
for n:=1 to len( cCode )
if (nCar:=at(substr(cCode,n,1),cChar)) > 0
cBarra += aBar[ nCar ]
endif
next
return cBarra
Code: Select all
CODE3DE9.PRG
============
#include 'fivewin.ch'
function _Code3_9( cCode, lCheck )
static cCars := '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%'
STATIC aBarras:={'1110100010101110',;
'1011100010101110',;
'1110111000101010',;
'1010001110101110',;
'1110100011101010',;
'1011100011101010',;
'1010001011101110',;
'1110100010111010',;
'1011100010111010',;
'1010001110111010',;
'1110101000101110',;
'1011101000101110',;
'1110111010001010',;
'1010111000101110',;
'1110101110001010',;//E
'1011101110001010',;
'1010100011101110',;
'1110101000111010',;
'1011101000111010',;
'1010111000111010',;
'1110101010001110',; //K
'1011101010001110',;
'1110111010100010',;
'1010111010001110',;
'1110101110100010',;
'1011101110100010',;//p
'1010101110001110',;
'1110101011100010',;
'1011101011100010',;
'1010111011100010',;
'1110001010101110',;
'1000111010101110',;
'1110001110101010',;
'1000101110101110',;
'1110001011101010',;
'1000111011101010',;//Z
'1000101011101110',;
'1110001010111010',;
'1000111010111010',; // ' '
'1000101110111010',;
'1000100010100010',;
'1000100010100010',;
'1000101000100010',;
'1010001000100010'}
local cCar,m, n, n1,n2, cBarra := '', nCheck := 0
default lCheck := .f.
cCode := upper(cCode)
if len(cCode )>32
cCode := left(cCode,32)
end
cCode := '*'+cCode+'*'
for n:= 1 to len( cCode )
cCar := substr( cCode,n,1)
m:=at( cCar, cCars )
if n>0 // _ se ignoran :-))
cBarra := cBarra + aBarras[m]
nCheck += (m-1)
end
next
if lCheck
cBarra+= aBarras[nCheck%43 +1]
end
return cBarra
Code: Select all
CODE128.PRG
===========
static aCode :={"212222",;
"222122",;
"222221",;
"121223",;
"121322",;
"131222",;
"122213",;
"122312",;
"132212",;
"221213",;
"221312",;
"231212",;
"112232",;
"122132",;
"122231",;
"113222",;
"123122",;
"123221",;
"223211",;
"221132",;
"221231",;
"213212",;
"223112",;
"312131",;
"311222",;
"321122",;
"321221",;
"312212",;
"322112",;
"322211",;
"212123",;
"212321",;
"232121",;
"111323",;
"131123",;
"131321",;
"112313",;
"132113",;
"132311",;
"211313",;
"231113",;
"231311",;
"112133",;
"112331",;
"132131",;
"113123",;
"113321",;
"133121",;
"313121",;
"211331",;
"231131",;
"213113",;
"213311",;
"213131",;
"311123",;
"311321",;
"331121",;
"312113",;
"312311",;
"332111",;
"314111",;
"221411",;
"431111",;
"111224",;
"111422",;
"121124",;
"121421",;
"141122",;
"141221",;
"112214",;
"112412",;
"122114",;
"122411",;
"142112",;
"142211",;
"241211",;
"221114",;
"213111",;
"241112",;
"134111",;
"111242",;
"121142",;
"121241",;
"114212",;
"124112",;
"124211",;
"411212",;
"421112",;
"421211",;
"212141",;
"214121",;
"412121",;
"111143",;
"111341",;
"131141",;
"114113",;
"114311",;
"411113",;
"411311",;
"113141",;
"114131",;
"311141",;
"411131",;
"211412",;
"211214",;
"211232",;
"2331112"}
function _code128(cCode,cMode)
local nSum:=0, cBarra, cCar
local cTemp, n, nCAr, nCount:=0
local lCodeC := .f. ,lCodeA:= .f.
// control de errores
if valtype(cCode) !='C'
alert('Barcode c128 required a Character value. ')
return nil
end
if !empty(cMode)
if valtype(cMode) = 'C' .and. Upper(cMode) $ 'ABC'
cMode := Upper(cMode)
else
alert('Code 128 Modes are A,B o C. Character values.')
end
end
if empty(cMode) // modo variable
// an lisis de tipo de c¢digo...
if str(val(cCode),len(cCode)) = cCode // s¢lo n£meros
lCodeC := .t.
cTemp := aCode[106]
nSum := 105
else
for n:=1 to len(cCode)
nCount += if(substr(cCode,n,1) > 31,1,0) // no cars. de control
end
if nCount < len(cCode) / 2
lCodeA := .t.
cTemp := aCode[104]
nSum := 103
else
cTemp := aCode[105]
nSum := 104
end
end
else
if cMode == 'C'
lCodeC := .t.
cTemp := aCode[106]
nSum := 105
elseif cMode == 'A'
lCodeA := .t.
cTemp := aCode[104]
nSum := 103
else
cTemp := aCode[105]
nSum := 104
end
end
nCount := 0 // caracter registrado
for n := 1 to len(cCode)
nCount ++
cCar := substr(cCode,n,1)
if lCodeC
if len(cCode) = n // ultimo caracter
CTemp += aCode[101] // SHIFT Code B
nCar := asc(cCar) - 31
else
nCar := Val(substr(cCode,n,2))+1
n++
end
elseif lCodeA
if cCar> '_' // Shift Code B
cTemp += aCode[101]
nCar := asc(cCar)-31
elseif cCar <= ' '
nCar := asc(cCar)+64
else
nCar := asc(cCar)-31
endif
else // code B standard
if cCar <= ' ' // shift code A
cTemp += aCode[102]
nCar := asc(cCar)+64
else
nCar := asc(cCar)-31
end
endif
nSum += (nCar-1) * nCount
cTemp := cTemp + aCode[nCar]
next
nSum := nSum%103 + 1
cTemp := cTemp + aCode[ nSum ] + aCode[107]
cBarra := ''
for n := 1 to len(cTemp) step 2
cBarra += replicate('1',val(substr(cTemp,n,1)))
cBarra += replicate('0',val(substr(cTemp,n+1,1)))
next
return cBarra
Code: Select all
EAN13.PRG
=========
// genera codigo ean13
static derecha:=[1110010110011011011001000010101110010011101010000100010010010001110100]
static izda1:= [0001101001100100100110111101010001101100010101111011101101101110001011]
static izda2:= [0100111011001100110110100001001110101110010000101001000100010010010111]
static primero:=[ooooooooeoeeooeeoeooeeeooeooeeoeeooeoeeeoooeoeoeoeoeeooeeoeo]
#include "common.ch"
function _ean13( cCode )
local l,s1,s2,controln,ac,cad,cadena,cadena2, n1, n2, NUmero
local Izda, Dcha, String, Mascara, k ,n
k:=left(alltrim(cCode)+'000000000000',12) // padding with '0'
// calculo del digito de control
k:=k+EAN13_CHECK(k) // Chaeck Digit en EAN13
// preparacion de la cadena de impresion
cadena:=[]
dcha:=SUBSTR(K,8,6)
izda:=substr(k,2,6)
mascara:=substr(primero,(val(substr(k,1,1))*6)+1,6)
* ? mascara
// barra de delimitacion
cadena:=[101]
// parte izda
for n=1 to 6
numero:=val(substr(izda,n,1))
if substr(mascara,n,1)=[o]
string:=substr(izda1,numero*7+1,7)
else
string:=substr(izda2,numero*7+1,7)
end
* ? strzero(numero,1)+[->]+string
cadena:=cadena+string
next
cadena:=cadena+[01010]
// LADO DERECHO
for n=1 to 6
numero:=val(substr(dcha,n,1))
string:=substr(derecha,numero*7+1,7)
* ? strzero(numero,1)+[->]+string
cadena:=cadena+string
next
cadena:=cadena+[101]
* ? cadena
* cadena:=cadena+[101]
return Cadena
*-- FUNCTION -----------------------------------------------------------------
* Nombre: EAN13_CHECK() Docs: Cayetano Gomez
* Descripcion: Ean13, check Digit
* Autor: Cayetano Gomez
* Creado: 9/06/97 Actualizado: þ9/06/97
* Hora: 11:40:36 Hora: þ11:40:36
* Copyright: C.G.R.
*-----------------------------------------------------------------------------
* Argumentos: cCode
* Retorna: nil
* Relacionado:
*-----------------------------------------------------------------------------
FUNCTION EAN13_CHECK(cCode)
local s1,s2,l,Control,n
s1:=0 // suma de impares
s2:=0 // suma de pares
for n=1 to 6
s1:=s1+val(substr(cCode,(n*2)-1,1))
s2:=s2+val(substr(cCode,(n*2),1))
next
control:=(s2*3)+s1
l:=10
do while control>l
l:=l+10
end
control:=l-control
RETURN sTr(control,1,0)
function _ean13BL(nLen)
default nLen to 12
nLen:=int(nLen/2)
return '101'+replicate('0',nLen*7)+'01010'+replicate('0',nLen*7)+'101'
function _UPC( cCode, nLen )
local l,s1,s2,control,n,ac,cad,cadena, n1, n2, NUmero
local Izda, Dcha, String, Mascara, k
default nLen to 11
default cCode to '0'
// valid values for nLen are 11,7
k:=left(alltrim(cCode)+'000000000000',nLen) // padding with '0'
// calculo del digito de control
k=k+Upc_CHECK(cCode,nLen) // cCode,nLen
nLen++
// preparacion de la cadena de impresion
cadena:=[]
dcha:=Right(K,nLen/2)
izda:=Left(k,nLen/2)
// barra de delimitacion
cadena:=[101]
// parte izda
for n=1 to len(Izda)
numero:=val(substr(izda,n,1))
cadena+=substr(izda1,numero*7+1,7)
next
cadena:=cadena+[01010]
// LADO DERECHO
for n=1 to len(dcha)
numero:=val(substr(dcha,n,1))
cadena+=substr(derecha,numero*7+1,7)
next
cadena:=cadena+[101]
return Cadena
function _UPCABL(cCode)
local cadena, k
k:=left(alltrim(cCode)+'000000000000',11) // padding with '0'
// calculo del digito de control
k=k+Upc_CHECK(cCode,11) // cCode,nLen
// preparacion de la cadena de impresion
cadena:=[101]
// parte izda
cadena+=substr(izda1,val(left(k,1))*7+1,7)
cadena+=replicate('0',35) // resto
cadena:=cadena+[01010] //centro
// LADO DERECHO
cadena+=replicate('0',35) // resto
cadena+=substr(derecha,val(right(k,1))*7+1,7)
cadena:=cadena+[101]
return Cadena
*-- FUNCTION -----------------------------------------------------------------
* Nombre: Upc_CHECK() Docs: Cayetano Gomez
* Descripcion: ChechDigit del UPC
* Autor: Cayetano Gomez
* Creado: 9/06/97 Actualizado: þ9/06/97
* Hora: 11:47:09 Hora: þ11:47:09
* Copyright: C.G.R.
*-----------------------------------------------------------------------------
* Argumentos: cCode
* : nLen, Numero de digitoss ( 11 o 7)
* Retorna: Cadena
* Relacionado:
*-----------------------------------------------------------------------------
Function Upc_CHECK(cCode,nLen)
local s1,s2,n,l,control
s1:=0 // suma de impares
s2:=0 // suma de pares
for n=1 to nLen step 2
s1:=s1+val(substr(cCode,n,1))
s2:=s2+val(substr(cCode,n+1,1))
next
control:=(s1*3)+s2
l:=10
do while control>l
l:=l+10
end
control:=l-control
return str(Control,1,0)
// suplemento de 5 digitos
function _Sup5(cCode)
local l, k, control, n, cBarras := '1011',nCar
static parity:=[eeoooeoeooeooeoeoooeoeeooooeeooooeeoeoeooeooeooeoe]
k:=left(alltrim(cCode)+'00000',5) // padding with '0'
control := right( str( val(substr(k,1,1))*3 + val(substr(k,3,1))*3 ;
+ val(substr(k,5,1))*3 + val(substr(k,2,1))*9+;
val(substr(k,4,1))*9,5,0 ),1)
control:=substr(primero,val(control)*6+2,5)
for n:=1 to 5
nCar:=val(substr(k,n,1))
if substr(control,n,1)='o'
cBarras+=substr(Izda2,nCar*7+1,7)
else
cBarras+=substr(Izda1,nCar*7+1,7)
end
if n<5
cBarras+='01'
end
next
return cBarras
Code: Select all
GO_CODE.PRG
===========
// imprime un codigo
#include 'FiveWin.ch'
function go_code( cBarra, nx,ny,oPrint,lHoRz, nColor, nWidth, nLen)
local n, oBr
if empty(nColor)
nColor := CLR_BLACK
end
default lHorz := .t.
default nWidth := 0.025 // 1/3 M/mm
default nLen := 1.5 // Cmm.
define brush oBr color nColor
// Width of Bar
if !lHorz
nWidth :=round ( nWidth * 10 * oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nWidth :=round ( nWidth * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
// Len of bar
if lHorz
nLen :=round ( nLen * 10 * oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nLen :=round ( nLen * 10 * oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
for n:=1 to len(cBarra)
if substr(cBarra,n,1) ='1'
if lHorz
oPrint:fillRect({nx,ny,nx+nLen,(ny+=nWidth)},oBr)
else
oPrint:fillRect({nx,ny,(nx+=nWidth),ny+nLen},oBr)
end
else
if lHorz
ny+=nWidth
else
nx += nWidth
end
end
next
oBr:end()
return nil
Code: Select all
INT25.PRG
=========
// interleave 2 of 5
// matrix 2 of 5
#include "common.ch"
static aBar:={"00110","10001",'01001','11000','00101','10100','01100',;
'00011','10010','01010'}
static cStart:='0000'
static cStop:='100'
static cMtSt:='10000' // matrix start/stop
static cInStart := '110' // industrial 2 of 5 start
static cInStop := '101' // industrial 2 of 5 stop
function _int25(cCode,lMode)
local n,cBar:='', cIz:='',cDer:='',nLen:=0,nCheck:=0,cBarra:=''
local m
default lMode to .f.
cCode:=trans(cCode,'@9') // elimina caracteres
if (nLen%2=1.and.!lMode)
nLen++
cCode+='0'
end
if lMode
for n:=1 to len(cCode) step 2
nCheck+=val(substr(cCode,n,1))*3+val(substr(cCode,n+1,1))
next
cCode += right(str(nCheck,10,0),1)
end
nLen:=len(cCode)
cBarra:= cStart
// preencoding .. interlaving
for n:=1 to nLen step 2
cIz:=aBar[val(substr(cCode,n,1))+1]
cDer:=aBar[val(substr(cCode,n+1,1))+1]
for m:=1 to 5
cBarra+=substr(cIz,m,1)+substr(cDer,m,1)
next
next
cBarra+=cStop
for n:=1 to len(cBarra) step 2
if substr(cBarra,n,1)='1'
cBar+='111'
else
cBar+='1'
end
if substr(cBarra,n+1,1)='1'
cBar+='000'
else
cBar+='0'
end
next
return cBar
function _MAT25(cCode,lCheck)
local cBar:='',cBarra:='', nCheck,n
default lCheck to .f.
cCode:=trans(cCode,'@9') // only digits
if lCheck
for n:=1 to len(cCode) step 2
nCheck+=val(substr(cCode,n,1))*3+val(substr(cCode,n+1,1))
next
cCode += right(str(nCheck,10,0),1)
end
cBar:=cMtSt
for n:=1 to len(cCode)
cBar+=aBar[val(substr(cCode,n,1))+1]+'0'
next
cBar+=cMtSt
for n:=1 to len(cBar) step 2
if substr(cBar,n,1)='1'
cBarra+='111'
else
cBarra+='1'
end
if substr(cBar,n+1,1)='1'
cBarra+='000'
else
cBarra+='0'
end
next
return cBarra
function _Ind25(cCode,lCheck)
local cBar:='',cBarra:='', nCheck,n
default lCheck to .f.
cCode:=trans(cCode,'@9') // only digits
if lCheck
for n:=1 to len(cCode) step 2
nCheck+=val(substr(cCode,n,1))*3+val(substr(cCode,n+1,1))
next
cCode += right(str(nCheck,10,0),1)
end
cBar:=cInStart
for n:=1 to len(cCode)
cBar+=aBar[val(substr(cCode,n,1))+1]+'0'
next
cBar+=cInStop
for n:=1 to len(cBar)
if substr(cBar,n,1)='1'
cBarra+='1110'
else
cBarra+='10'
end
next
return cBarra