` Printed Icetips Article

Icetips Article



Par2: Using Jim Kane's Print Class with receipt printer
2004-11-18 -- Greg Sayler
 
For anyone interested in how to use jim Kane's print class to print to a 
receipt printer here is what I did...

RetVal              BYTE(0)
C1                  STRING(100)
C2                  STRING(100)
C1Width             BYTE
C2Width             BYTE
WordStart           LONG
WordEnd             LONG
Text1               CSTRING(1000)

MyPrinterDialog     LONG
MyPrinterFF         LONG

PrintDataAddr       LONG
PrintDataLen        LONG

EnumPtrcl        EnumPrtClType

ReceiptQ        QUEUE,PRE(ReceiptQ)
Line              CSTRING(100)
                END

Window WINDOW,AT(,,300,23),CENTER,GRAY
       STRING('Printing 
Receipt....'),AT(120,6),USE(?String1),FONT(,,COLOR:Red,,CHARSET:ANSI)
       TEXT,AT(70,14,160,8),USE(Text1),BOXED,HIDE,FONT('Courier',,,,CHARSET:ANSI)
     END

  CODE
  LOOP
    IF GEN:ReceiptPrinter = '' OR ~GEN:ReceiptPrinterCols
      MESSAGE('Receipt Printer Not Setup!')
      SetupForm
      CYCLE
    END
    BREAK
  END

  EnumPtrCl.Init()
  MyPrinterDialog   = 0
  MyPrinterFF       = 0

  OPEN(Window)
  C1Width = GEN:ReceiptPrinterCols - 12
  C2Width = GEN:ReceiptPrinterCols - C1Width
  ?Text1{Prop:Width} = GEN:ReceiptPrinterCols * 4 + 1
  ?Text1{Prop:Text}  = GEN:ReceiptMessage
  DISPLAY

  ReceiptQ:Line = CENTER('Store Number: ' & 
GEN:StoreNumber,GEN:ReceiptPrinterCols)
  DO AddReceiptQ

  !Add any more lines needed here

  !This is how I format for Item followed by an amount
  C1 = RIGHT('Gift Card Number:',C1Width)
  C2 = RIGHT(GIH:GiftCertNumber,C2Width)
  ReceiptQ:Line = CLIP(C1) & CLIP(C2)
  DO AddReceiptQ

  !Add receipt text from setup file
  LOOP i# = 1 TO ?Text1{Prop:LineCount}
    ReceiptQ:Line = ?Text1{Prop:Line,i#}
    DO AddReceiptQ
  END

  !Add blank lines required to force receipt to tear off
  LOOP GEN:ReceiptPrinterBlankLines TIMES
    ReceiptQ:Line = ' '
    DO AddReceiptQ
  END

  LOOP x# = 1 TO RECORDS(ReceiptQ)
    GET(ReceiptQ, x#)
    IF ERRORCODE() THEN STOP(ERROR()).

    PrintDataAddr = ADDRESS(ReceiptQ:Line)
    PrintDataLen  = LEN(CLIP(ReceiptQ:Line))

   
EnumPTrcl.DirectPrtBlock(MyPrinterDialog,GEN:ReceiptPrinter,PrintDataAddr,PrintDataLen,MyPrinterFF)
  END!Loop

  DO ProcedureReturn

AddReceiptQ         ROUTINE
  !Need FF if less than printers full col length
  IF LEN(CLIP(ReceiptQ:Line)) < GEN:ReceiptPrinterCols
    ReceiptQ:Line = ReceiptQ:Line & '<13,10>'
  END
  ADD(ReceiptQ)

ProcedureReturn     ROUTINE
  Enumptrcl.Kill()
  FREE(ReceiptQ)
  RETURN(RetVal)



Printed May 2, 2024, 11:56 am
This article has been viewed/printed 35121 times.