Printer class question - RESOLVED

User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Printer class question

Post by karinha »

João Santos - São Paulo - Brasil
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Printer class question

Post by karinha »

Code: Select all

// Using: GDIPLUS.

#include "FiveWin.ch"

#define PAD_LEFT            0
#define PAD_RIGHT           1
#define PAD_CENTER          2

FUNCTION BoxRed() // CAIXA REDONDA - BOXROUND.

   LOCAL oPrn, oFont, oFont2, oFont3, oPen, oPen1, oPen2, oPen3
   LOCAL oBrush, oFondo
   LOCAL ResLinha, ResColuna, nLinha, nColuna
   LOCAL nLinBox, nColBox, nAltBox, nTamBox, lBorEsq, lBorDir

   PRINT oPrn NAME "Ejemplo de caja redondeada" PREVIEW

      DEFINE BRUSH oBrush   COLOR nRGB(250,213,174) // Bello
      DEFINE BRUSH oFondo   COLOR CLR_GRAY  // HGRAY

      // DEFINE PEN oPen WIDTH 2                                    OF oPrn
      DEFINE PEN oPen  WIDTH 2  COLOR CLR_CYAN                    OF oPrn
      Define Pen oPen1 Width 25 COLOR nRgb( 192, 192, 192 )       OF oPrn
      DEFINE PEN oPen2 WIDTH 2  COLOR CLR_BROWN                   OF oPrn
      DEFINE PEN oPen3 WIDTH 50 COLOR nRgb( 192, 192, 192 )       OF oPrn

      DEFINE FONT oFont  NAME "Arial" SIZE 0, - 6  BOLD           OF oPrn
      DEFINE FONT oFont2 NAME "Arial" SIZE 0, - 12 BOLD Underline OF oPrn
      DEFINE FONT oFont3 NAME "Arial" SIZE 0, - 18 BOLD           OF oPrn

      ResLinha  := oPrn:nLogPixely() / 2.54
      ResColuna := oPrn:nLogPixelx() / 2.54

      PAGE

        nLinha  := 2.25
        nColuna := 9.50

        nLinBox := 1.60  // Linha que Inicia o Box
        nColBox := 5.50  // Coluna que inicia o Box
        nAltBox := 3.50  // Altura do Box
        nTamBox := 13.60 // Tamanho(Largura) do Box horizontal
        lBorEsq := 90    // Bordas arredondadas esquerda.
        lBorDir := 90    // Bordas arrendondadas direita.

        Box_Round( nLinBox , nColBox , nAltBox, nTamBox, oPrn, lBorEsq, lBorDir, oPen, oFondo )

        oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                    ;
           + "DESCRIZIONE DOCUMENTO", oFont2,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + .80

        oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                    ;
           + "FiveWin is invincible.", oFont,, CLR_BLACK,, PAD_CENTER )


      ENDPAGE

   ENDPRINT

   oBrush:End()
   oFondo:End()
   oPen:End()
   oPen:release()

RETURN nil

FUNCTION Box_Round( nArriba, nIzq, nAbajo, nDerecha, oPrn, a, b, oPen, oBrush )

   LOCAL hOldPen, xCor := {} , yCor := {}
   LOCAL hOldBrush

   // Pasamos coordenadas de cms a pixel
   xCor := oPrn:Cmtr2Pix(nArriba,nIzq)
   yCor := oPrn:Cmtr2Pix(nAbajo,nDerecha)

   // Guardamos el Lapiz y la brocha que teniamos
   hOldPen   := SelectObject( oPrn:hDcOut, oPen:hPen )
   hOldBrush := SelectObject( oPrn:hDcOut, oBrush:hBrush )

   //Dibujamos el rectangulo redondeado
   roundrect(oPrn:hdcOut,xCor[2],xCor[1],yCor[2],yCor[1],a,b)

   // y  seleccionamos el que habiamos guardado
   selectObject( oPrn:hDcOut, hOldPen )
   selectObject( oPrn:hDcOut, hOldBrush )

RETURN NIL

#IFDEF __HARBOUR__
   DLL FUNCTION RoundRect( hDC AS LONG, ;
              iLeft AS _INT , iTop AS _INT, ;
              iRight AS _INT, iBottom AS _INT, ;
              iWidth AS _INT, iHeight AS _INT ) AS BOOL PASCAL LIB "GDI32.DLL"
#ELSE
   DLL FUNCTION RoundRect( hDC AS WORD, ;
              iLeft AS _INT , iTop AS _INT, ;
              iRight AS _INT, iBottom AS _INT, ;
              iWidth AS _INT, iHeight AS _INT ) AS BOOL PASCAL LIB "GDI.EXE"
#ENDIF
 
Regards.
João Santos - São Paulo - Brasil
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Printer class question

Post by Silvio.Falconi »

No. sorry
I would like to create a system where I can store the print form on a file
not just a single box that was just an example
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
TimStone
Posts: 2536
Joined: Fri Oct 07, 2005 1:45 pm
Location: Trabuco Canyon, CA USA
Contact:

Re: Printer class question

Post by TimStone »

Silvio,

I am sorry to be confused. All of my printouts are stored in .prg files. The content is all variables which are filled from the data. For example, an Invoice has a company name at the top ( either in text or a bitmap ), then two boxes for invoice data, side by side, multi line, and two more boxes for customer and vehicle data. These are grey boxes with borders. Then it lists parts in the next section, all properly formatted, and then labor, and then recommendations. Totals come next in a box that is has a white background, and finally the "fine print" plus any advertising info. These can be black and white, or color.

The whole invoice is a .prg file. It is the "template". Some labels are printed every time, but all data is stored at variables. Those variables are set before the print commences, or drawn fromt the .dbf fields as the printing progresses.

It might be like the report capability in FWH except it is all customized using the printer class, and far more can be done with decision trees to control the actual content and output.

I think this is pretty standard using the class. With that in mind, I'm afraid I don't really understand how this differs from what you want. In my example, the user inputs all the data into a workorder which he interacts with on the screen. To print an invoice ( or other document ) he simply presses a single button and the system selects the data from the current files which match that workorder, applies the proper formatting, and prints the invoice ( all with a single press ), or displays it in preview mode if preferred.

Tim
Tim Stone
http://www.MasterLinkSoftware.com
timstone@masterlinksoftware.com
Using: FWH 19.06 with Harbour 3.2.0 / Microsoft Visual Studio Community 2019
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Printer class question

Post by karinha »

OK. When you manage to do this, please post to all FiveWin users, it will be super interesting. Waiting. Thank you.
João Santos - São Paulo - Brasil
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Printer class question

Post by Silvio.Falconi »

TimStone wrote:Silvio,

I am sorry to be confused. All of my printouts are stored in .prg files. The content is all variables which are filled from the data. For example, an Invoice has a company name at the top ( either in text or a bitmap ), then two boxes for invoice data, side by side, multi line, and two more boxes for customer and vehicle data. These are grey boxes with borders. Then it lists parts in the next section, all properly formatted, and then labor, and then recommendations. Totals come next in a box that is has a white background, and finally the "fine print" plus any advertising info. These can be black and white, or color.

The whole invoice is a .prg file. It is the "template". Some labels are printed every time, but all data is stored at variables. Those variables are set before the print commences, or drawn fromt the .dbf fields as the printing progresses.

It might be like the report capability in FWH except it is all customized using the printer class, and far more can be done with decision trees to control the actual content and output.

I think this is pretty standard using the class. With that in mind, I'm afraid I don't really understand how this differs from what you want. In my example, the user inputs all the data into a workorder which he interacts with on the screen. To print an invoice ( or other document ) he simply presses a single button and the system selects the data from the current files which match that workorder, applies the proper formatting, and prints the invoice ( all with a single press ), or displays it in preview mode if preferred.

Tim
Timm is all right but you see I have to do a pile of documents every time, in Italy for the prints there are many types and every time I have to do many of them sometimes I use the same prints sometimes I can't use them and so if they do a store where to store the format, the fields would be easier
I was hoping for a good report designer program but there is nothing to do, they tell you it uses ER but ER has a lot of problems and honestly wasting time on ER I don't really want to, we always have to do the nistri trained in Italy you have to do about twenty all different in addition to the other prints (lists) that I use the simple treport cche also there are the problems like the famous ncounter then solved in a topic in the forum, we have the invoice but we do not have a single document there there are many types of invoices:
accompanying invoice,
deferred invoice,
proforma invoice,
immediate invoice,
deferred invoice,
advance invoice
down payment invoice
invoice for gifts
Credit and debit note
and these are for invoices only then there are many other documents
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
TimStone
Posts: 2536
Joined: Fri Oct 07, 2005 1:45 pm
Location: Trabuco Canyon, CA USA
Contact:

Re: Printer class question

Post by TimStone »

Silvio,

I likely have about 60 printouts, and they can be quite different. Each has it's own .prg.

For example, on any workorder, there are 3 options: Estimate, Invoice, and Worksheet. So in one .prg, as it goes through the process I mentioned earlier, it may print different data or formats. How does it know ? You can use IF ... ENDIF statements or the the good DO CASE option. You set an array of flags to .f., and then before printing you select the option you want for the format. That changes the value of the proper flag to .t., and the printout outputs those options.

If you requier multiple reports, you could first show a checklist. Then, you call a single Function that will print each report that is checked. You will need a key for the data to use ( in my case it is the workorder number ), but your reports can all draw the proper data based on that key.

To put it simply, each type of form has it's own .prg.
You start with a selection / options screen that allows you to decide which form(s) to print
The data for that specific job is then applied to each form and it outputs them.
Each form can have a unique design based on the needs and requirements of the client, or even the government.

Tim
Tim Stone
http://www.MasterLinkSoftware.com
timstone@masterlinksoftware.com
Using: FWH 19.06 with Harbour 3.2.0 / Microsoft Visual Studio Community 2019
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Printer class question

Post by Silvio.Falconi »

Nages,
Method box ...parametri atext
I can set text font color
How se can add Also the align ?
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Printer class question

Post by Silvio.Falconi »

nageswaragunupudi wrote:

Code: Select all

function PrnBox()

   local oPrn, oFont, oBrush

   DEFINE BRUSH oBrush FILE "c:\fwh\bitmaps\backgrnd\pebbles.bmp"
   PRINT oPrn PREVIEW
   DEFINE FONT oFont NAME "VERDANA" SIZE 0,-30 OF oPrn BOLD

   PAGE
   oPrn:RoundBox( 1, 1, 5, 5, .5, .5, { CLR_HRED, 3 }, oBrush, ;
                  { "FIRST" + CRLF + "SECOND", oFont, CLR_WHITE, "B" }, ;
                  "INCHES" )
   @ 1,1 PRINT TO oPrn TEXT "HOLLOW TEXT" SIZE 4, 4 INCHES FONT oFont ;
         COLOR CLR_YELLOW OUTLINE CLR_HRED SIZE 3 ALIGN "T"

   ENDPAGE
   ENDPRINT

   RELEASE FONT oFont
   RELEASE BRUSH oBrush

return nil
Image
Nages,
this test run ok BUT I tried

DEFINE FONT oFont NAME "VERDANA" SIZE 0,-6 OF oPrn BOLD

oPrn:Box( 1, 5.5,1.5,0.8, { CLR_BLACK, 1 }, CLR_HGRAY, ;
{ "TIPO DOCUMENTO", oFont, CLR_WHITE, "TL" }, ;
"CM" )

and not run ok


Image






and this small test not run


I wish recreate this

Image






I tried with

Code: Select all


 #include"fivewin.ch"


   function PrnBox()

       local oPrn, oFont, oFont2
       local aDat

        PRINT oPrn PREVIEW

       DEFINE FONT oFont NAME "VERDANA" SIZE 0,-6 OF oPrn BOLD
       DEFINE FONT oFont2 NAME "VERDANA" SIZE 0,-12 OF oPrn BOLD
       PAGE


      //   x , y, nWidth,nHeight
aDat:=  {;
         {1,5.5,4.5,0.8,"Tipo Documento" },;
         {5.5,5.5,2.5,0.8,"Numero Documento" },;
         {8,5.5,2.5,0.8,"Data Documento" },;
             }

For n= 1 to 3

        X:=    aDat[n][1]
        Y:=    aDat[n][2]
        nWid:= aDat[n][3]
        nHei:= aDat[n][4]

     oPrn:Box( x, y,nHei,nWid,  { CLR_BLACK, 1 }, CLR_HGRAY, ;
                      { aDat[n][5], oFont, CLR_WHITE, "TL" }, ;
                      "CM" )


     next





       ENDPAGE
       ENDPRINT

       RELEASE FONT oFont
        RELEASE FONT oFont2
    return nil

 

the measures are on cm

but the result is this
Image
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Printer class question

Post by Silvio.Falconi »

Now perhaps I understood but the text are not showded

I tried with

Code: Select all

 

function PrnBox()

       local oPrn, oFont, oFont2
              PRINT oPrn PREVIEW

       DEFINE FONT oFont NAME "VERDANA" SIZE 0,-6 OF oPrn BOLD
       DEFINE FONT oFont2 NAME "VERDANA" SIZE 0,-10 OF oPrn BOLD
       PAGE


oPrn:Box(7.50,1,6.6,7.5,  { CLR_BLACK, 1 }, CLR_HGRAY, ;
                    { "TIPO DOCUMENTO", oFont, CLR_WHITE, "TL" }, ;
                      "CM" )

        oPrn:Box(7.50,7.6,6.6,10.5,  { CLR_BLACK, 1 }, CLR_HGRAY, ;
                    { "NUMERO DOCUMENTO", oFont, CLR_WHITE, "TR" }, ;
                      "CM" )

          oPrn:Box(7.50,10.6,6.6,14.5,  { CLR_BLACK, 1 }, CLR_HGRAY, ;
                    { "DATA DOCUMENTO", oFont, CLR_WHITE, "B" }, ;
                      "CM" )


            //FIELD
           @ 3.50,1 PRINT TO oPrn TEXT "DESCRIZIONE DOCUMENTO" SIZE 6, 4 CM FONT oFont2 ;
         COLOR CLR_BLACK  ALIGN "BR"

          @ 3.50,5.8 PRINT TO oPrn TEXT "NUMERO" SIZE 4, 4 CM FONT oFont2 ;
         COLOR CLR_BLACK  ALIGN "BR"

            @ 3.50,9.8 PRINT TO oPrn TEXT "DATA" SIZE 4, 4 CM FONT oFont2 ;
         COLOR CLR_BLACK  ALIGN "BR"


 ENDPAGE
       ENDPRINT

       RELEASE FONT oFont
        RELEASE FONT oFont2
        return nil
 
and this is the result

Image

the coordinates are all bad
and the text smaller of method box are not showed
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Printer class question

Post by Silvio.Falconi »

Perhaps we found the solution

now I see all text

Image

Image

Code: Select all

  #include"fivewin.ch"


   function PrnBox()

       local oPrn, oFont, oFont2
       local aDat
       local nRow,nCol,nHei,nWid
     
 
        PRINT oPrn PREVIEW

       DEFINE FONT oFont NAME "VERDANA" SIZE 0,-6 OF oPrn BOLD
       DEFINE FONT oFont2 NAME "VERDANA" SIZE 0,-10 OF oPrn BOLD
       PAGE         

           nRow:= 7.50
            nCol:= 1
            nHei:= nRow+0.8
            nWid:= 7.5

         oPrn:Box(nRow,nCol,nHei,nWid,  { CLR_BLACK, 1 }, CLR_HGRAY, ;
                    { "TIPO DOCUMENTO", oFont, CLR_WHITE, "TL" }, ;
                      "CM" )


            nRow:= 7.50
            nCol:= 7.7
            nHei:= nRow+0.8
            nWid:= 11.5

        oPrn:Box(nRow,nCol,nHei,nWid,  { CLR_BLACK, 1 }, CLR_HGRAY, ;
                    { "NUMERO DOCUMENTO", oFont, CLR_WHITE, "TL" }, ;
                      "CM" )

            nRow:= 7.50
            nCol:= 11.7
            nHei:= nRow+0.8
            nWid:= 15.5

            oPrn:Box(nRow,nCol,nHei,nWid,  { CLR_BLACK, 1 }, CLR_HGRAY, ;
                    { "DATA DOCUMENTO", oFont, CLR_WHITE, "TL" }, ;
                      "CM" )
            nRow:= 4.30



            //FIELD
           @ nRow,1 PRINT TO oPrn TEXT "DESCRIZIONE DOCUMENTO" SIZE 6, 4 CM FONT oFont2 ;
         COLOR CLR_BLACK  ALIGN "BR"

          @ nRow,5.8 PRINT TO oPrn TEXT "NUMERO" SIZE 4, 4 CM FONT oFont2 ;
         COLOR CLR_BLACK  ALIGN "BR"

            @ nRow,9.8 PRINT TO oPrn TEXT "DATA" SIZE 4, 4 CM FONT oFont2 ;
         COLOR CLR_BLACK  ALIGN "BR"


ENDPAGE
       ENDPRINT

       RELEASE FONT oFont
        RELEASE FONT oFont2
        return nil


Note ( the values inserted are in cm)

if the boxes start at line 7.50, the writings with the "PRINT TO oPrn" command start at line 4.30
and this is difficult to program, that is, it is not clear why this text must begin 3.20 cm less
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
Otto
Posts: 4470
Joined: Fri Oct 07, 2005 7:07 pm
Contact:

Re: Printer class question

Post by Otto »

Hello Silvio,
You can try with EasyReport.
Best regards,
Otto
Image
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org

********************************************************************
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Printer class question

Post by Silvio.Falconi »

Otto wrote:Hello Silvio,
You can try with EasyReport.
Best regards,
Otto

As I told ER not run well!!!!!!!!!!!!!!

I can't waste time making prints
Unfortunately you don't live in Italy (even if you are 15 KM from the border)
In Italy there are many special documents to do
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Printer class question

Post by Silvio.Falconi »

with the help of Nageswarao I was able to create something equal

this is the original

Image


and this is what I created this afternoon, studying the technique

Image

tomorrow I will think how to create something automatically and print the forms from a print format archive

Nages,
the thickness of the lines is not good, yet I have put 1 as a value, you can have a choice like:
Very fine, fine, Medium, Thick, very thick
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Printer class question

Post by Silvio.Falconi »

resolved
{ CLR_BLACK, 0.5 }
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
Post Reply