Amigos como puedo imprimir un codigo de barra en una caja de dialogo
Esta funcion _code128 me devuelve una cadena de 1 y 0 que representa las barras
Para imprimir las barras uso go2code
quien recibe esa cadena y la imprime
Pero eso lo hace para la impresora ,la clase de cayetano no tiene de como hacerlo
con una caja de dialogo .
Para dibujar las barras usa el metodo fillrect de la clase printer
Yo la adapto con un get usando la fucion fillrect pero no dibuja las barras
en el get que podra ser :
go2code(_code128(oAlum:barcode),0,0,oGet,,,,)
Aqui ose dejo el codigo de go2code para ver en donde puede esta el error
/// oprint es oget ojo es solo una variable q ahora es un get
function go2code( cBarra, nx,ny,oPrint,lHoRz, nColor, nWidth, nLen)
local n, oBr
if empty(nColor)
nColor := CLR_BLACK
end
default lHorz := .t.
default nWidth := 25//0.025 // 1/3 M/mm
default nLen :=15// 1.5 // Cmm.
define brush oBr color nColor
// Width of Bar
if !lHorz
nWidth :=round ( nWidth ,0 ) //* 10 ,0 )//* oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nWidth :=round ( nWidth ,0 ) //* 10 ,0 )//* oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
// Len of bar
if lHorz
nLen :=round ( nLen ,0 ) //* 10 ,0 )//* oPrint:nVertRes() / oPrint:nVertSize() ,0 )
else
nLen :=round ( nLen ,0 ) //* 10 ,0 )//* oPrint:nHorzRes() / oPrint:nHorzSize(), 0 )
end
for n:=1 to len(cBarra)
if substr(cBarra,n,1) ='1'
//FillRect( ::hDC, GetClientRect( ::hWnd ), ::oBrush:hBrush )
? nx,ny,nx+nLen,(ny+=nWidth)
if lHorz
FillRect( oPrint:hDC, {nx,ny,nx+nLen,(ny+=nWidth)}, oBr )
//oPrint:fillRect({nx,ny,nx+nLen,(ny+=nWidth)},oBr)
else
FillRect( oPrint:hDC,{nx,ny,(nx+=nWidth),ny+nLen} , oBr )
// 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
Y el codigo de _code128 es este
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