kapiaba Posted March 3, 2016 Report Share Posted March 3, 2016 Simulando modo console com PRINTER.PRG #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 /* 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*/ Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.