FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Imprimir en fondo negro y letra blanca
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM

Imprimir en fondo negro y letra blanca

Posted: Sun Mar 26, 2017 02:27 PM

En una impresora:
¿Cómo se puede hacer para imprimir la letra en blanco y el bondo en negro?. Es decir, hacer como si fuera el negativo.
Para imprimir normálmente nos deja elegir si queremos, Negrilla (bold), itálica, subrayado, tachado, pero no veo como elegir/cambiar el color de la letra y su fondo.

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM

Re: Imprimir en fondo negro y letra blanca

Posted: Sun Mar 26, 2017 11:58 PM
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Imprimir en fondo negro y letra blanca

Posted: Mon Mar 27, 2017 06:19 AM

La clase TPrinter proporciona este método:

METHOD SayText( nRow, nCol, cText, nWidth, nHeight, oFont, cAlign, nClrText, nClrBack )

En donde puedes especificar el color del texto nClrText y el color del fondo nClrBack

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM

Re: Imprimir en fondo negro y letra blanca

Posted: Mon Mar 27, 2017 08:49 AM

Gracias Antonio.
Pero dos duda más:
Como ahora estamos usando el método cmsay,

1.- ¿nRow y nCol están en cm?.

2.- ¿A qué se refieren nWith y nHight? si el tamaño ya va dado en el oFont según el tipo de letra.

3.- ¿Qué valores se puede dar a cAlign?

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM

Re: Imprimir en fondo negro y letra blanca

Posted: Tue Mar 28, 2017 12:06 AM
METHOD SayText( nRow, nCol, cText, [nWidth], [nHeight], [oFont], [cAlign], [nClrText], [nClrBack], [cUnits] )

10th parameter is cUnits. Possible values are "INCHES","CM","MM","PIXEL". Case not sensitive. Default Pixels

cAlign:
"T" : Top
"B" : Bottom
"L" : Left
"R" : Right
Can be combined "TL", "TR", "BL", "BR"
Default is "TL" --> Top Left

We advise using the command instead of calling method directly:

Code (fw): Select all Collapse
#xcommand @ <nRow>, <nCol> PRINT TO <prn> TEXT <cText> ;
      [SIZE <nWidth> [,<nHeight>] ] ;
      [<unit: PIXEL,MM,CM,INCHES>] ;
      [FONT <fnt>] ;
      [ALIGN <aln>] ;
      [COLOR <nTxt> [,<nBck> ] ] ;
      [LASTROW <lrow>] ;
   => ;
      [<lrow> := ] <prn>:SayText( <nRow>, <nCol>, <cText>, [<nWidth>], [<nHeight>], ;
            [<fnt>], [<aln>], [<nTxt>], [<nBck>], [<(unit)>] )


#xcommand @ <nRow>, <nCol> PRINT TO <prn> IMAGE <img> ;
      [SIZE <nWidth> [,<nHeight>] ] ;
      [<unit: PIXEL,MM,CM,INCHES>] ;
      [<lStr: STRETCH>] ;
      [ ALPHALEVEL <nAlpha>] ;
      [<lNoTrn: NOTRANSPARENT>] ;
      [<lGray: GRAY> ] ;
      [LASTROW <lrow>] ;
   => ;
      [<lrow> := ] <prn>:PrintImage( <nRow>, <nCol>, <img>, [<nWidth>], [<nHeight>], ;
            [<.lStr.>], [<nAlpha>], [!<.lNoTrn.>], [<.lGray.>], [<(unit)>] )
Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM

Re: Imprimir en fondo negro y letra blanca

Posted: Tue Mar 28, 2017 12:43 AM
Sample Usage:
Code (fw): Select all Collapse
#include "fivewin.ch"

function Main()

   local oPrn
   local nRow, oFont1
   local oBrush, oBlack

   DEFINE BRUSH oBrush FILE "c:\fwh\bitmaps\backgrnd\geige.bmp"
   DEFINE BRUSH oBlack COLOR CLR_BLACK

   PRINT oPrn PREVIEW

   DEFINE FONT oFont1 NAME "Arial" SIZE 0,-30 BOLD OF oPrn

   PAGE
      @ 1,1 PRINT TO oPrn TEXT "WHITE ON BLACK" + CRLF + "TEXT" + CRLF + "TWO LINES" ;
         SIZE 6,2 INCHES FONT oFont1 COLOR CLR_WHITE, CLR_BLACK ALIGN "TR" ;
         LASTROW nRow

      @ 3.5,1 PRINT TO oPrn TEXT "WHITE ON BRUSH" + CRLF + "TEXT" + CRLF + "TWO LINES" ;
         SIZE 6,2 INCHES FONT oFont1 COLOR CLR_WHITE, oBlack ALIGN "BL" ;
         LASTROW nRow

      @ 6.0,1 PRINT TO oPrn TEXT "WHITE ON BRUSH" + CRLF + "TEXT" + CRLF + "TWO LINES" ;
         SIZE 6,2 INCHES FONT oFont1 COLOR CLR_WHITE, oBrush ALIGN "C" ;
         LASTROW nRow

   ENDPAGE
   ENDPRINT

   RELEASE FONT oFont1
   RELEASE BRUSH oBrush, oBlack

return nil


Regards



G. N. Rao.

Hyderabad, India
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM

Re: Imprimir en fondo negro y letra blanca

Posted: Tue Mar 28, 2017 12:51 PM

Thanks a lot Nageswaragunupudi.

Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM

Re: Imprimir en fondo negro y letra blanca

Posted: Tue Mar 28, 2017 01:14 PM

Utilizo la versión de FW 15.01 y no admite ese saytext.
Debe de corresponder a una versión posterior.
No me ha sido posible utilizar el código de Nageswaragunupudi .

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM

Re: Imprimir en fondo negro y letra blanca

Posted: Tue Mar 28, 2017 01:29 PM

From Version FWH 16.04

Regards



G. N. Rao.

Hyderabad, India
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM

Re: Imprimir en fondo negro y letra blanca

Posted: Tue Mar 28, 2017 02:11 PM
Very good mister Nages. Many thanks.

http://i.imgur.com/QSJAkJC.png



Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM

Re: Imprimir en fondo negro y letra blanca

Posted: Thu Mar 30, 2017 08:19 AM
Lo estoy intentando con los comandos siguientes, pero cuando lo hago con texto en blanco y fondo en negro no funciona:

Code (fw): Select all Collapse
   //Configura los colores a texto en negro y fondo en blanco
    SetTextColor( oPrn:hDCOut, nrgb(0,0,0) )  //nrgb(0,0,0)=negro; nrgb(255,255,255)=Blanco
    SetBkColor( oPrn:hDCOut, nrgb(255,255,255) )
   oPrn:CmSay(nl, mrgiz, transform(11111.85,'99,999.99 €'), oFont2)
    nl=nl+4*nsl
   
   //Invierte los colores de texto y fondo 
    SetTextColor( oPrn:hDCOut, nrgb(255,255,255) )  //Texto Blanco
    SetBkColor( oPrn:hDCOut, nrgb(0,0,0) )          //Fondo Negro
   oPrn:CmSay(nl, mrgiz, transform(22222.85,'99,999.99 €'), oFont2)
    
    //Devuelve los colores a la configuración normal.
    SetTextColor( oPrn:hDCOut, nrgb(0,0,0) )        //Texto Negro
    SetBkColor( oPrn:hDCOut, nrgb(255,255,255) )    //Fondo Blanco
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM

Re: Imprimir en fondo negro y letra blanca

Posted: Thu Mar 30, 2017 01:18 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM

Re: Imprimir en fondo negro y letra blanca

Posted: Sat Apr 01, 2017 03:29 PM
Code (fw): Select all Collapse
   SetBkColor( oPrn:hDCOut, CLR_BLACK )
   oPrn:CmSay( 10, 4, "Some tex to print", oFont, 10, CLR_WHITE, 2 )
Regards



G. N. Rao.

Hyderabad, India
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM

Re: Imprimir en fondo negro y letra blanca

Posted: Mon Apr 03, 2017 07:05 PM
Por algún motivo que desconozco con solo el código de Nageswaranugupudi no me ha funcionado.
Sin embargo, con la idea obtenida de la recomendación de Kaninha he logrado construir una función para hacerlo.
Os dejo el código que incluye una con función con un ejemplo.

Gracias.

Code (fw): Select all Collapse
/** Funcion para probar la impresora de Tikets.
    Tiene que instalarse el Driver para la impresora.
    Selecionar como predeterminada.
    Si está conectada al LPT1 tiene que ser la única conectada al mismo.
     Funciona igual que con cualquier impresora Windows.
 **/
function pruebaprn_win(lprever,oPadre)
  local nl:=0           // numero de linea que se está  imprimiendo.
  local pg:=1                 // numero de página que se está  imprimiendo.
  local Ultpg:=1              // numero de páginas a imprimir.
  local texto:=Space(62)      // texto de la línea a imprimir.

  local oPrN
  local oFont1, oFont2, oFontCond, oFontCodBarras, oFontCodBarras2D, oFontBarrasQR
  local fontsize := -8
  local font2size:=-20
  local nColStep :=0
  local nsl := 4 * (-1)*(-6) / 100  // Alto en cm para el salto de linea. ¡EMPIRICO¡

  local mrgiz:=0, mrgsu:=0  // En centímetros.

  local oPen1, oPen2
  local aPosImg:={}, aTamImg:={}, cFileImg:=''
  
  default lPrever:=.T.
  
   if lPrever = .f.
     PRINT oPrn NAME "Prueba_PRN_"+dtos(date()) TO cNomImpresora
    else
     SeleccionaPrn()
     PRINT oPrn NAME "Prueba_PRN_"+dtos(date()) TO cNomImpresora PREVIEW
   endif  
     
    DEFINE FONT oFont1 NAME "ARIAL" SIZE 0, fontsize OF oPrn
    DEFINE FONT oFont2 NAME "ARIAL" SIZE 0, font2size BOLD OF oPrn
    DEFINE FONT oFontCond NAME "consolas" SIZE 0, 8 OF oPrn
    
    // 29/03/2017: LOS SIGUIENTES TIPOS PROBADOS OK CON LAS FUENTES QUE TRAE LA IMPRESORA DE TIKETS BIXOLON SRP-330II
    DEFINE FONT oFontCodBarras NAME "Barcode3" OF oPrn
    DEFINE FONT oFontCodBarras2D NAME "2D-CODE1" SIZE 0,-10 OF oPrn
    DEFINE FONT oFontCodBarrasQR NAME "QR Code" SIZE 0,-10 OF oPrn
    
    DEFINE PEN oPen1 width 1
    DEFINE PEN oPen2 width 2
    
    if empty( oPrn:hDC )
      msgstop( "No hay impresora preparada" )
      return NIL
    endif
    
 // Comienza el proceso de impresión.
 PAGE
   nl=mrgsu
  
   nl=nl+1*nsl
    
   oPrn:CmSay(nl        ,mrgiz    ,'Referencia: 12345'   ,oFontCond)
   
   CmLinea(oPrn,nl+2*nsl,mrgiz,nl+2*nsl,8,oPen1) // Línea a lo largo de la página.  
 
   nl=nl+1*nsl
   
   oPrn:CmSay(nl+2*nsl,mrgiz+0.1,'ARTICULO DE PRUEBA Ñ',oFont1)
   
   nl=nl+3*nsl
   
   oPrn:CmSay(nl, mrgiz, 'ARTICULO DE PRUEBA Ñ', oFont2,8,,, 2)
   
   nl=nl+4*nsl
   
   //Configura los colores a texto en negro y fondo en blanco
   SetTextColor( oPrn:hDCOut, nrgb(0,0,0) )  //nrgb(0,0,0)=negro; nrgb(255,255,255)=Blanco
   SetBkColor( oPrn:hDCOut, nrgb(255,255,255) )
   oPrn:CmSay(nl, mrgiz, transform(11111.85,'99,999.99 €'), oFont2)

   nl=nl+4*nsl
   
   //Cambia los colores de texto y fondo    
   PrnCmSaycolor(oPrn,nl,mrgiz,transform(22222.85,' 99,999.99 € Izda'),oFont2,nrgb(255,255,255),nrgb(255,0,0),,,)
   PrnCmSaycolor(oPrn,nl+4*nsl,mrgiz,transform(33333.85,'99,999.99 € Dcha '),oFont2,nrgb(255,0,255),nrgb(0,255,0),1,8,1)
   PrnCmSaycolor(oPrn,nl+8*nsl,mrgiz,alltrim(transform(44444.85,'99,999.99 € Center')),oFont2,nrgb(255,255,0),nrgb(0,0,255),1,,2)
   PrnCmSaycolor(oPrn,nl+12*nsl,mrgiz,alltrim(transform(44444.85,'99,999.99 € Center')),oFont2,nrgb(255,255,0),nrgb(0,0,255),1,8,2)                                                                   
   
   nl=nl+16*nsl 
    
   CmLinea(oPrn,nl,mrgiz,nl,5.5,oPen2) // Línea a lo largo de la factura.
    
   nl=nl+1*nsl
 
   oPrn:CmSay(nl,0,'1234567890123456789012345678901234567890',oFontCond)
   
   nl=nl+2*nsl
 
   oPrn:CmSay(nl,0,'8000113009510',oFontCond)

   nl=nl+2*nsl
 
   oPrn:CmSay(nl,0,'8000113009510',oFontCodBarras)
   
   nl=nl+2*nsl
 
   oPrn:CmSay(nl,0,'8000113009510',oFontCodBarras2D)

   nl=nl+2*nsl
 
   oPrn:CmSay(nl,0,'8000113009510',oFontCodBarrasQR)
      
 ENDPAGE
 ENDPRINT // Apaga la impresora

 oPen1:end()
 oPen2:end()
return NIL

//Pinta en la impresora una línea en color
function PrnCmSaycolor(oPrn,nRowcm,nColcm,cText,oFont,nColorLetra,nColorFondo, nBkMode,nCmAncho,nAlineamiento)
 local nOldColorLetra:= 0 //Texto Blanco
 local nOldBkColor   := 0 //Texto Fondo
 local nOldBkMode    := 0 //Back Mode; 1 transparente, 2 opaco.
 local ammPageSize  := oPrn:GetPhySize()
 
 local oBrush, aDesde:={}, aHasta:={}
  
 default nColorLetra:=nrgb(0,0,0)
 default nColorFondo:=nrgb(255,255,255)
 default nBkMode := 1 // 1= transparente, 2= opaco
 
 default nCmAncho:= ammPageSize[1]/10 //Por defecto todo el ancho de la página
 default nAlineamiento:=0 //LEFT 0, RIGHT 1,CENTER 2

 DEFINE BRUSH oBrush COLOR nColorFondo

 nOldColorLetra:=SetTextColor( oPrn:hDCOut, nColorLetra )  //Texto Blanco
 nOldBkColor   :=SetBkColor( oPrn:hDCOut, nColorFondo ) 
 nBkMode       :=SetBkMode( oPrn:hDCOut, nBkMode )
 
 aDesde:=oPrn:cmtr2pix(nRowcm,nColcm)
 aHasta:=oPrn:cmtr2pix(nRowcm,nColcm+nCmAncho); aHasta[1]=aHasta[1]+oPrn:GetTextHeight( "", oFont )+5
    
 oPrn:FillRect( {aDesde[1],aDesde[2],aHasta[1],aHasta[2]}, oBrush )
 
 do CASE
    CASE nAlineamiento = 0  // Izquierda
          nColcm=nColcm
    CASE nAlineamiento = 1  // Derecha
          nColcm=nCmAncho-oPrn:CmtrGetTextWidth( cText, oFont )
    CASE nAlineamiento = 2  // Centrado
          nColcm=nColcm+(nCmAncho-oPrn:CmtrGetTextWidth( cText, oFont ))/2
 endcase

 oPrn:CmSay(nRowcm,nColcm, cText, oFont,nCmAncho,nColorLetra,nBkMode,0)
    
 //Devuelve los colores a la configuración anterior a pintar.
 SetTextColor( oPrn:hDCOut, nOldColorLetra )       
 SetBkColor( oPrn:hDCOut, nOldBkColor )
 SetBkMode( oPrn:hDCOut, nOldBkMode )
 
 oBrush:end()
return

Continue the discussion