Page 1 of 1
Color printing
Posted:
Wed Mar 20, 2019 9:11 pm
by TimStone
Using the tPrinter class, is there a way to print a column with a specific color ?
I have a report that attaches to an Invoice. It is a checklist. The first column should be green, the second yellow, the third red, and the last ( and biggest ) is no color and contains the description. The first 3 columns will have printing but just a few characters each.
Re: Color printing
Posted:
Thu Mar 21, 2019 3:13 am
by nageswaragunupudi
Yes
Please use nClrText parameter in the Print (say) methods of Printer class.
Please refer to printer.prg
Re: Color printing
Posted:
Thu Mar 21, 2019 5:00 pm
by TimStone
I had looked at that. What I want is to have the column background color to be set.
With an xBrowse, we get this effect by using this:
- Code: Select all Expand view
oLbx8:aCols[1]:SetCheck()
oLbx8:aCols[1]:bClrstd := {|| { 0, 65280 } } // Green
oLbx8:aCols[2]:SetCheck()
oLbx8:aCols[2]:bClrstd := {|| { 0, 65535 } } // Yellow
oLbx8:aCols[3]:SetCheck()
oLbx8:aCols[3]:bClrstd := {|| { 0, 255 } } // Red
oLbx8:aCols[4]:SetCheck()
Now I want to have the same result when I do a printout, where the first 3 COLUMNS can have the background color set to green, yellow, and red.
I also noticed that I can use the SAYTEXT( ) method so I tried this:
- Code: Select all Expand view
IF oPrintInspect:svcpas
oPrn:SayText( nRow, 2*nCsp, "PASS",,, oFbold, , CLR_BLACK, CLR_GREEN )
ELSEIF oPrintInspect:svcwat
oPrn:SayText( nRow, 2*nCsp, "Watch",,, oFbold , , CLR_BLACK, CLR_YELLOW )
ELSEIF oPrintInspect:svcfal
oPrn:Say( nRow, 2*nCsp, "FAIL",,, oFbold , , CLR_BLACK, CLR_RED )
ENDIF
It prints no color. I am using a Brother Color Laser Printer ... but not getting any output to Preview, or to Print, in color ... just black and white
Re: Color printing
Posted:
Thu Mar 21, 2019 11:34 pm
by Otto
Hello Tim,
try Fivewin’s EasyReport.
Best regards
Otto
Re: Color printing
Posted:
Thu Mar 21, 2019 11:44 pm
by Otto
Hello Tim
now with your green and red .
Best regards
Otto
Re: Color printing
Posted:
Fri Mar 22, 2019 5:51 pm
by TimStone
Otto,
I want to try EasyReport but I don't think I have a working build yet.
HOWEVER, in this case I am creating an invoice that includes a variety of data to be presented. It is certainly not simple, and it has decisions to make as it is processed. I wrote it using tPrinter and it works quite well.
I would like to work with EasyReport but I need to have a stable copy. It is my understanding that it was never finished ( thought Antonio told me in 12/2017 that was a priority for 2018 ). I believe it should be in our FWH distributions and useable as a report generator that we can build into our application. I think that was the original goal, so I can give my clients a tool to build custom reports.
Tim
Re: Color printing
Posted:
Fri Mar 22, 2019 10:37 pm
by Otto
Hello Tim,
vrd.prg is renamed as esreport.prg and included in fwh\functions.
The function and class names are changed.
easyrep.ch translates the same commands to esreport.prg function names.
No need to link vrd.prg.
Can you please post a screen of your bill.
EasyReport is in FWH distributions and useable as a report generator.
You can build EasyReport into our application.
Please start with some reports.
Best regards
Otto
Re: Color printing
Posted:
Fri Mar 22, 2019 11:12 pm
by TimStone
Otto,
Can I have an email address to send you a copy ?
Tim
Re: Color printing
Posted:
Sat Mar 23, 2019 12:13 am
by nageswaragunupudi
Using printer object directly:
FWH15.10 introduced enhanced methods for printing text and images.
- Code: Select all Expand view
METHOD SayText( nRow, nCol, cText, nWidth, nHeight, oFont, cAlign, nClrText, nClrBack )
METHOD PrintImage( nRow, nCol, uImage, nWidth, nHeight, lStretch, nAlpha, lTransp, lGray )
Command syntax is provided for ease of use (see print.ch). We recommend use of command syntax.
Example:
- Code: Select all Expand view
#include "fivewin.ch"
function Main()
local oPrn, oFont
local oBrushGreen, oBrushRed, oBrushYellow
local nRow, nRowSize
USE CUSTOMER NEW ALIAS CUST
PRINT oPrn PREVIEW
DEFINE FONT oFont NAME "ARIAL" SIZE 0,-14 OF oPrn
DEFINE BRUSH oBrushGreen COLOR CLR_HGREEN
DEFINE BRUSH oBrushRed COLOR CLR_RED
DEFINE BRUSH oBrushYellow COLOR CLR_YELLOW
PAGE
nRow := 1.0 // inch
nRowSize := 0.3 // inch
do while RECNO() < 11
@ nRow, 1.0 PRINT TO oPrn TEXT CUST->FIRST SIZE 1.45,nRowSize INCHES FONT oFont ;
COLOR CLR_BLACK, oBrushGreen
@ nRow, 2.5 PRINT TO oPrn TEXT CUST->CITY SIZE 1.45,nRowSize INCHES FONT oFont ;
COLOR CLR_WHITE, oBrushRed
@ nRow, 4.0 PRINT TO oPrn TEXT CUST->ZIP SIZE 1.25,nRowSize INCHES FONT oFont ;
COLOR CLR_HBLUE, oBrushYellow
@ nRow, 5.3 PRINT TO oPrn IMAGE If( CUST->MARRIED, FWBmpOn(), FWBmpOff() ) ;
SIZE 0.50,nRowSize INCHES
nRow += nRowSize
SKIP
enddo
ENDPAGE
ENDPRINT
RELEASE FONT oFont
RELEASE BRUSH oBrushGreen, oBrushRed, oBrushYellow
return nil
Result:
Re: Color printing
Posted:
Sat Mar 23, 2019 7:11 pm
by TimStone
Thank you. Since all of my code is using the class rather than the command, I was getting an error trying to inject a COMMAND line. However, I translated to the SAYTEXT( ) successfully.
I would still suggest you look at SAY( ) and SAYTEXT( ) in printer.prg. As I noted before, if you set a color with either one for a single line ( or section ) it remains in force for all further calls to the SAY. It becomes the default until changed. Sometimes we want to simply put a highlight on a word or phrase in a different color. This requires extra code on each call to SAY( ) or SAYTEXT( ).
You could modify the method to save the current color value(s), then specify the new ones for the print line specified, and then return to the original colors before exiting the method(s). I think this would be helpful.
I can do it on my copy of printer.prg, and link that in, but then I have to make the change on every new version we receive.
Re: Color printing
Posted:
Mon Mar 25, 2019 2:38 am
by nageswaragunupudi
I would still suggest you look at SAY( ) and SAYTEXT( ) in printer.prg. As I noted before, if you set a color with either one for a single line ( or section ) it remains in force for all further calls to the SAY. It becomes the default until changed. Sometimes we want to simply put a highlight on a word or phrase in a different color. This requires extra code on each call to SAY( ) or SAYTEXT( ).
This is the behaviour of the METHOD Say() but NOT the METHOD SayText(). Seems you made the comment without actually testing SayText().
This behaviour of :Say() has been in existence since beginning and there could be a lot of working software using this behaviour. Any change might affect the existing software.
Since all of my code is using the class rather than the command, I was getting an error trying to inject a COMMAND line. However, I translated to the SAYTEXT( ) successfully.
Usage of command syntax should not give any errors. Proof is the posting above. In addition I have been using it in many software projects without any problem. However whether to use command syntax or method directly is a matter of programmers' choice.
Re: Color printing
Posted:
Tue Apr 09, 2019 6:29 pm
by TimStone
This is the behaviour of the METHOD Say() but NOT the METHOD SayText(). Seems you made the comment without actually testing SayText().
Seems that's a rather unfair assumption since I DID adopt the SayText() method as YOU suggested ... and that is how it is performing ...
- Code: Select all Expand view
// Prints FAIL as white on red
oPrn:SayText( nRow, 2 * nCsp, "FAIL",6*nCsp,nRsp, oFbold, , CLR_WHITE, oBrushRed )
// Prints text in White on Red
oPrn:SayText( nRow, 10 * nCsp, MemoLine( oPrintInspect:svcdes, 60, lx,, .T. ),,, oFnorm )
// Required to return text to default of black on white
oPrn:SayText( nRow, 10 * nCsp, MemoLine( oPrintInspect:svcdes, 60, lx,, .T. ),,, oFnorm, , CLR_BLACK, oBrushWhite )