Código: Selecionar todos
/*
* $Id: testw32p.prg 8142 2007-12-05 08:17:30Z vszakats $
*/
#define FORM_A4 9
#define PS_SOLID 0
#define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) )
#define BLACK RGB( 0x0 ,0x0 ,0x0 )
#define BLUE RGB( 0x0 ,0x0 ,0x85 )
#define GREEN RGB( 0x0 ,0x85,0x0 )
#define CYAN RGB( 0x0 ,0x85,0x85 )
#define RED RGB( 0x85,0x0 ,0x0 )
#define MAGENTA RGB( 0x85,0x0 ,0x85 )
#define BROWN RGB( 0x85,0x85,0x0 )
#define WHITE RGB( 0xC6,0xC6,0xC6 )
PROCEDURE Main()
LOCAL nPrn := 1
LOCAL cBMPFile := Space( 40 )
LOCAL aPrn := GetPrinters()
LOCAL GetList := {}
CLS
IF Empty( aPrn )
Alert("No printers installed - Cannot continue")
QUIT
ENDIF
DO WHILE nPrn != 0
CLS
@ 0, 0 SAY "Win32Prn() Class test program. Choose a printer to test"
@ 1, 0 SAY "Bitmap file name" GET cBMPFile PICT "@!K"
READ
@ 2, 0 TO MaxRow(), MaxCol()
nPrn := AChoice( 3, 1, MaxRow() - 1, MaxCol() - 1, aPrn, .T.,, nPrn )
IF nPrn != 0
PrnTest( aPrn[ nPrn ], cBMPFile )
ENDIF
ENDDO
RETURN
STATIC PROCEDURE PrnTest( cPrinter, cBMPFile )
LOCAL oPrinter := Win32Prn():New( cPrinter )
LOCAL aFonts
LOCAL x
LOCAL nColFixed
LOCAL nColTTF
LOCAL nColCharSet
oPrinter:Landscape := .F.
oPrinter:FormType := FORM_A4
oPrinter:Copies := 1
IF !oPrinter:Create()
Alert( "Cannot Create Printer" )
ELSE
IF !oPrinter:startDoc( "Win32Prn(Doc name in Printer Properties)" )
Alert( "StartDoc() failed" )
ELSE
oPrinter:SetPen(PS_SOLID, 1, RED)
oPrinter:Bold(800)
oPrinter:TextOut(oPrinter:PrinterName+": MaxRow() = "+STR(oPrinter:MaxRow(),4)+" MaxCol() = "+STR(oPrinter:MaxCol(),4))
oPrinter:Bold(0) // Normal
oPrinter:NewLine()
oPrinter:TextOut(" Partial list of available fonts that are available for OEM_")
oPrinter:NewLine()
oPrinter:UnderLine(.T.)
oPrinter:Italic(.T.)
// oPrinter:SetFont("Courier New",7,{3,-50}) // Compressed print
nColFixed:= 40 * oPrinter:CharWidth
nColTTF := 48 * oPrinter:CharWidth
nColCharSet := 60 * oPrinter:CharWidth
oPrinter:TextOut("FontName")
oPrinter:SetPos(nColFixed)
oPrinter:TextOut("Fixed?")
oPrinter:SetPos(nColTTF)
oPrinter:TextOut("TrueType?")
oPrinter:SetPos(nColCharset)
oPrinter:TextOut("CharSet#",.T.)
oPrinter:NewLine()
oPrinter:Italic(.F.)
oPrinter:UnderLine(.F.)
aFonts:= oPrinter:GetFonts()
oPrinter:NewLine()
FOR x:= 1 TO LEN(aFonts) STEP 2
oPrinter:CharSet(aFonts[x,4])
IF oPrinter:SetFont(aFonts[x,1]) // Could use "IF oPrinter:SetFontOk" after call to oPrinter:SetFont()
IF oPrinter:FontName == aFonts[x,1] // Make sure Windows didn´t pick a different font
oPrinter:TextOut(aFonts[x,1])
oPrinter:SetPos(nColFixed)
oPrinter:TextOut(IIF(aFonts[x,2],"Yes","No"))
oPrinter:SetPos(nColTTF)
oPrinter:TextOut(IIF(aFonts[x,3],"Yes","No"))
oPrinter:SetPos(nColCharSet)
oPrinter:TextOut(STR(aFonts[x,4],5))
oPrinter:SetPos(oPrinter:LeftMargin, oPrinter:PosY + (oPrinter:CharHeight*2))
IF oPrinter:PRow() > oPrinter:MaxRow() - 10 // Could use "oPrinter:NewPage()" to start a new page
EXIT
ENDIF
ENDIF
ENDIF
oPrinter:Line(0, oPrinter:PosY+5, 2000, oPrinter:PosY+5)
NEXT x
oPrinter:SetFont("Lucida Console",8,{3,-50}) // Alternative Compressed print
oPrinter:CharSet(0) // Reset default charset
oPrinter:Bold(800)
oPrinter:NewLine()
oPrinter:TextOut("This is on line"+STR(oPrinter:Prow(),4)+", Printed bold, " )
oPrinter:TextOut(" finishing at Column: ")
oPrinter:TextOut(STR(oPrinter:Pcol(),4))
oPrinter:SetPrc(oPrinter:Prow()+3, 0)
oPrinter:Bold(0)
oPrinter:TextOut("Notice: UNDERLINE only prints correctly if there is a blank line after",.T.)
oPrinter:TextOut(" it. This is because of ::LineHeight and the next line",.T.)
oPrinter:TextOut(" printing over top of the underline. To avoid this happening",.T.)
oPrinter:TextOut(" you can to alter ::LineHeight or use a smaller font")
oPrinter:NewLine()
oPrinter:NewLine()
oPrinter:SetFont("Lucida Console",18, 0) // Large print
oPrinter:SetColor( GREEN )
oPrinter:TextOut("Finally some larger print")
oPrinter:Box( 0, oPrinter:PosY+100, 100, oPrinter:PosY+200)
oPrinter:Arc(200, oPrinter:PosY+100, 300, oPrinter:PosY+200)
oPrinter:Ellipse(400, oPrinter:PosY+100, 500, oPrinter:PosY+200)
oPrinter:FillRect(600, oPrinter:PosY+100, 700, oPrinter:PosY+200, RED)
// To print a barcode;
// Replace 'BCod39HN' with your own bar code font or any other font
// oPrinter:TextAtFont( oPrinter:MM_TO_POSX( 30 ) , oPrinter:MM_TO_POSY(60 ), "1234567890", "BCod39HN", 24, 0 )
//
PrintBitMap( oPrinter, cBMPFile )
oPrinter:EndDoc()
ENDIF
oPrinter:Destroy()
ENDIF
RETURN
STATIC PROCEDURE PrintBitMap( oPrn, cBitFile )
LOCAL oBMP
IF Empty( cBitFile )
*
ELSEIF !File( cBitFile )
Alert( cBitFile + " not found " )
ELSE
oBMP := Win32BMP():New()
IF oBmp:loadFile( cBitFile )
oBmp:Draw( oPrn, { 200, 200, 2000, 1500 } )
// Note: Can also use this method to print bitmap
// oBmp:Rect := { 200, 200, 2000, 1500 }
// oPrn:DrawBitMap( oBmp )
ENDIF
oBMP:Destroy()
ENDIF
RETURN