by jbrita » Thu Dec 11, 2014 7:40 pm
Ruben prueba esta clase :
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oPen
PUBLIC oImp, aoFont[4], aAnchop[4]
SET DATE TO FRENCH
DEFINE PEN oPen WIDTH 5
IniImp(21.5, 27.9, 72, 90, "CompraVenta de Hacienda", .t., .t., .f., 1 )
PAGE
PrnBox (22, 7,28,89,oPen)
PrnLine(30, 7,30,89,oPen)
PrnLine(33, 7,33,89,oPen)
prnLine(43, 7,43,89,oPen)
PrnLine(45, 7,45,32,oPen)
PrnLine(51, 7,51,32,oPen)
PrnLine(53, 7,53,32,oPen)
PrnLine(57, 7,57,32,oPen)
PrnLine(43,62,43,89,oPen)
PrnLine(54,62,54,89,oPen)
PrnLine(45,36,45,57,oPen)
PrnLine(52,36,52,57,oPen)
PrnLine(45,62,45,89,oPen)
PrnLine(52,62,52,89,oPen)
//cabezal
PrnSay(16,60, "Form.: "+ "123425", aoFont[1],80)
PrnSay(18, 8,"Empresa XXXXXX")
PrnSay(18,60,Date())
PrnSay(19, 8,"123456")
PrnSay(19,60,1250)
PrnSay(23, 8,"Productor:", aoFont[1],80)
PrnSay(24, 8,"El Productor que vende", aoFont[1],80)
PrnSay(23,45,"Consignatario:", aoFont[1],80)
PrnSay(24,45,"El Consignatario que Vende", aoFont[1],80)
PrnSay(25, 8,"RUT: "+"12 345678 9123", aoFont[1],80)
PrnSay(25,30,"CI: " +"173216547",aoFont[1],80)
PrnSay(25,45,"RUT: "+"12 345678 9123", aoFont[1],80)
PrnSay(26, 8,"Dicose: "+"123 456 789", aoFont[1],80)
PrnSay(26,45,"Dicose: "+"123 456 789", aoFont[1],80)
PrnSay(27, 8,"Guia: "+"123456", aoFont[1],80)
PrnSay(27,45,"Guia: "+"567890", aoFont[1],80)
PrnSay(29, 8,"Tiene flete? ", aoFont[1],80)
PrnSay(29, 21,.t., aoFont[1],80)
PrnSay(35, 7, "Este es un texto largo escrito para utilizar 120 columnas en medio de un documento que estaba en 80 columnas" )
PrnSay(63,8," .............................. ...............................",aoFont[1],120)
PrnSay(64,8," Firma del Comprador Firma de Vendedor/Representante",aoFont[1],120)
ENDPAGE
//Finalizo impresion
FinImp()
oPen:End()
RETURN NIL
/*Fin Función Main()
-----------------------------
/*
Funciones para imprimir con la clase tprint a la manera de la impresión de clipper en modo consola.
*/
/*
Funciones de Impresión con clase tPrint
---------------------------------------
IniImp( nAncho, nLargo [, nFilas, nColumnas, cNom_spooler, lsel_imp, lpreview, lLnds ,nCopias ] )
Configura la impresión indicando: ancho y largo de páginas en cms.
cantidad de filas y columnas
Nombre del spooler de impresión
Seleccion de Impresora
si va Preview
si es apaisado
cantidad de copias
(Como la impresión de Consola pero con Tprint)
PrnSay( nFila, nColum, Var, oFuente[ , nC ] )
Versión del viejo Say de consola con la clase Tprint
PrnBox( nFila1, nCol1, nFila2, nCol2, oPen, nC )
Imiprimir una caja con fila columna y fila columna estilo consola con tPrint
PrnLine( nFila1, nCol1, nFila2, nCol2, oPen, nC )
Imprimir una línea estilo consola con TPrint
FinImp()
Cierre de la impresión
----------------------------------------------------------------------------------------------------------------------
FUNCIONES DE IMPRESIÓN
----------------------------------------------------------------------------------------------------------------------*/
/*
Variables públicas requeridas en programa principal:
PUBLIC oImp, aoFont[4], aAnchop[4]
*/
#include "Fivewin.ch"
FUNCTION IniImp(nAncho, nLargo, nFilas, nColumnas, cNom_spooler, lsel_imp, lpreview, lLnds ,nCopias)
/*
Sintaxis:
IniImp( nAncho, nLargo [, nFilas, nColumnas, cNom_spooler, lsel_imp, lpreview, lLnds ,nCopias ] )
Requeridos:
cAncho - Ancho de pagina en cms.
cLargo - Largo de página en cms.
Opcionales:
nFilas - Cantidad de filas en el largo DEFAULT 60
nColumnas - Cantidad de columnas en el ancho 80 o 120 DEFAULT 80
cNom_Spooler - Nombre del listado en Spooler de impresion de Windows DEFAULT "Listado"
lSel_imp - .t. para que el usuario seleccione la impresora que usará DEFAULT .t.
lPreview - .t. para que se vea una vista preliminar. DEFAULT .f.
lLnds - .t. para Apaisado DEFAULT .f.
nCopias - Cantidad de copias DEFAULT 1
*/
LOCAL cFuente
cFuente:="Lucida Console" //Se utiliza aquí una fuente escalar
//evitando así mala ubicación de caracteres
//Valores default
IF cNom_Spooler=NIL
cNom_Spooler="Listado"
ENDIF
IF lSel_Imp=NIL
lSel_imp=.t.
ENDIF
IF lPreview=NIL
lPreview=.f.
ENDIF
IF lLnds=NIL
lLnds=.f.
ENDIF
IF nCopias=NIL
nCopias=1
ENDIF
PrnSetSize(nAncho*100, nLargo*100)
//Creo objeto tprinter
IF !lSel_imp .AND. !lPreview
PRINT oImp TITLE cNom_Spooler
ELSEIF lSel_imp .and. !lPreview
PRINT oImp TITLE cNom_Spooler FROM USER
ELSEIF !lSel_imp .and. lPreview
PRINT oImp TITLE cNom_Spooler PREVIEW
ELSEIF lSel_imp .and. lPreview
PRINT oImp TITLE cNom_Spooler FROM USER PREVIEW
ENDIF
IF lLnds
oImp:SetLandscape()
ENDIF
//establezco las copias
oImp:SetCopies(nCopias)
//calculo anchos de fila y columna segun la resolucion de la impresora
aAnchop[1]:=oImp:nVertRes()/nFilas
aAnchop[2]:=oImp:nHorzRes()/nColumnas //ancho en pixels de columna
aAnchop[3]:=nColumnas //hago publica nColumas en vector
aAnchop[4]:=lLnds //hago publica lLnds en el vector
//Defino Fonts
//Font normal
DEFINE FONT aoFont[1] NAME "Lucida Console" SIZE 0, -10 OF oImp
//Font Comprimida
DEFINE FONT aoFont[2] NAME "Lucida Console" SIZE 0, -8 OF oImp
//Font Muy Grande
DEFINE FONT aoFont[3] NAME "Lucida Console" SIZE 0, -24 OF oImp
//Font Grande
DEFINE FONT aoFont[4] NAME "Lucida Console" SIZE 0, -16 OF oImp
RETURN NIL
/*Fin Funcion IniImp
----------------------------------------------------------------------------------------------------------------------*/
FUNCTION PrnSay( nFila, nColum, Var, oFuente, nC )
LOCAL i, wVar, nesp, nCorr
/*Sintaxis:
PrnSay( nFila, nColum, Var [, oFuente, nC ] )
nFila es la fila donde se hace la impresion
ncolum es la columna donde comienza
var es una variable de cualquier tipo que contiene lo que se va a imprimir
nC es el total de columnas base (80 o 120)
El parámetro var es convertido a texto sin espacios al final y alineado a la derecha.
*/
IF nC=NIL
//Si no se especifica cantidad de columnas uso las especificadas en IniImp()
aAnchop[2]:=oImp:nHorzRes()/aAnchop[3]
ELSE
//Si se especifico cant. de columnas recalculo el ancho de columna
aAnchop[2]:=oImp:nHorzRes()/nC
ENDIF
//Convierto Var a texto para imprimir
IF VALTYPE(Var)="A" .or. VALTYPE(Var)="B" .or. VALTYPE(Var)="M" .or. VALTYPE(Var)="O" .or. VALTYPE(Var)="U"
wVar=Space(1)
ELSEIF valtype(Var)="C"
wVar=Rtrim(Var)
ELSEIF VALTYPE(Var)="D"
wVar:=Transform(Var,"@D")
ELSEIF VALTYPE(Var)="L"
IF Var
wVar="Si"
ELSE
wVar="No"
ENDIF
ELSEIF VALTYPE(Var)="N"
wVar:=Alltrim(Str(Var))
ENDIF
//paso fila y columna a pixels
nFila := nFila * aAnchop[1]
nColum := nColum * aAnchop[2] //Columna en pixels
nesp=( len(wVar) - len( Ltrim( wVar ) ) ) * aAnchop[2]
wVar:=Ltrim(wVar)
IF wVar<>Space(1)
IF Pcount()=3 //Si no indique fuente
oImp:Say( nFila, (nColum + nesp), wVar, if( aAnchop[3]<=80, aoFont[1], If( aAnchop[4], aoFont[1], aoFont[2] ) ) )
// si menos 80 cols uso aofont[1] sino si es apaisado, aofont[1] o sino aofont[2]
ELSE //si indique fuente
oImp:Say(nFila,(nColum + nesp),wVar, oFuente)
ENDIF
ENDIF
RETURN NIL
/*Fin Funcion PrnSay
----------------------------------------------------------------------------------------------------------------------*/
FUNCTION PrnBox(nFila1, nCol1, nFila2, nCol2, oPen, nC)
/*Sintaxis:
PrnBox( nFila, nCol1, nFila2, nCol2, oPen, nC )
nFila es la fila donde se hace la impresion
ncolum es la columna donde comienza
var es una variable de cualquier tipo que contiene lo que se va a imprimir
nC es el total de columnas base (80 o 120)
*/
IF nC=NIL
//Si no se especifica cantidad de columnas uso las especificadas en IniImp()
aAnchop[2]:=oImp:nHorzRes()/aAnchop[3]
ELSE
//Si se especifico cant. de columnas recalculo el ancho de columna
aAnchop[2]:=oImp:nHorzRes()/nC
ENDIF
//paso fila y columna a pixels
nFila1 := nFila1 * aAnchop[1]
nCol1 := nCol1 * aAnchop[2]
nFila2 := nFila2 * aAnchop[1]
nCol2 := nCol2 * aAnchop[2]
//dibujo el cuadro
oImp:Box(nFila1, nCol1, nFila2, nCol2, oPen)
RETURN NIL
/*Fin Funcion PrnBox
---------------------------------------------------------------------------------------------------------------------*/
FUNCTION PrnLine(nFila1, nCol1, nFila2, nCol2, oPen, nC)
IF Pcount()=6
//si se especifico cant. de columnas recalculo el ancho de columna
aAnchop[2]:=oImp:nHorzRes()/nC
ELSE
//Si no se especifica cantidad de columnas uso las especificadas en IniImp()
aAnchop[2]:=oImp:nHorzRes()/aAnchop[3]
ENDIF
//paso fila y columna a pixels
nFila1 := nFila1 * aAnchop[1]
nCol1 := nCol1 * aAnchop[2]
nFila2 := nFila2 * aAnchop[1]
nCol2 := nCol2 * aAnchop[2]
//Dibujo la linea
oImp:Line(nFila1, nCol1, nFila2, nCol2, oPen)
RETURN NIL
/*Fin Funcion PrnLine
---------------------------------------------------------------------------------------------------------------------*/
FUNCTION FinImp()
//Destruyo las fuentes
//finalizo la impresión
ENDPRINT
//elimino los fonts
aoFont[1]:End()
aoFont[2]:End()
aoFont[3]:End()
RETURN NIL
/*Fin Funcion FinImp
--------------------------------