>>LOCAL lcPrinter, oPrinter >>lcPrinter = GETPRINTER() >>lcTitle = "RTF Printout" >>SET PROCEDURE TO PrtClass.PRG ADDITIVE >>oPrinter = CREATEOBJECT("PrintObj",lcPrinter) >>WITH oPrinter >> .StartDoc(.hDC, lcTitle) >> .StartPage(.hDC) >> This.Parent.Rtfcontrol1.Olecontrol1.SelPrint(.hDC) >> .EndPage(.hDC) >> .EndDoc(.hDC) >>ENDWITH >>RELEASE oPrinter >>RELEASE PROCEDURE PrtClass >>>>
>>DEFINE CLASS PrintObj AS LINE >> hDC = 0 && holds the printer device context >> PROTECTED lnHeap, lnDoc >> lnHeap = 0 >> lnDoc = 0 >> PROCEDURE INIT(tcPrinter) && optionally, specify printer >> *Set up the Win API calls we'll need >> THIS.DeclareDLLs() >> * Create the Device Context >> THIS.hDC = THIS.CreateDC(tcPrinter) >> ENDPROC >> >> PROCEDURE DESTROY >> DeleteDC(THIS.hDC) >> ENDPROC >> >> PROCEDURE CreateDC(tcPrinter) >> * If no printer is specified, use the * first from APRINTERS() >> IF TYPE("tcPrinter")<>"C" OR EMPTY(tcPrinter) >> LOCAL laPrint[1,2], lncount >> lncount = APRINTERS(laPrint) >> IF lncount > 0 >> tcPrintar = laPrint[1,1] >> ELSE >> tcPrinter = "" >> ENDIF >> ENDIF >> RETURN CreateDC("WINSPOOL",tcPrinter,0,0) >> >> PROCEDURE DeclareDLLs( ) >> DECLARE INTEGER StartDoc IN Win32Api INTEGER, STRING >> DECLARE INTEGER StartPage IN Win32Api INTEGER >> DECLARE INTEGER EndPage IN Win32Api INTEGER >> DECLARE INTEGER EndDoc IN Win32Api INTEGER >> DECLARE INTEGER CreateDC IN Win32Api STRING, STRING, INTEGER, INTEGER >> DECLARE INTEGER DeleteDC IN Win32Api INTEGER >> DECLARE INTEGER HeapCreate IN Win32Api INTEGER, INTEGER, INTEGER >> DECLARE INTEGER HeapDestroy IN Win32Api INTEGER >> DECLARE INTEGER HeapAlloc IN Win32Api INTEGER, INTEGER, INTEGER >> DECLARE INTEGER HeapFree IN Win32Api INTEGER, INTEGER, INTEGER >> DECLARE Istrcpy IN Win32Api INTEGER, STRING >> ENDPROC >> >> PROCEDURE StartDoc(tnhDC, toDocName) >> * Run the Win API StartDoc function >> tcDocName = IIF(TYPE("tcDocName")<> "C","", tcDocName) >> >> LOCAL lnHeap, lnDoc, lcStruct >> * Create a Windows string w/ pointer for the queue name >> THIS.lnHeap = HeapCreate(0, 8192, 8192) >> THIS.lnDoc = HeapAlloc(THIS.lnHeap, 0, LEN(tcDocName)+1 ) >> Istrcpy ( THIS. lnDoc, tcDocName ) >> * Create a structure >> lcStruct = THIS.Toint(12) + ; >> THIS.Toint( ; >> IIF(EMPTY(tcDocName), 0, THIS.lnDoc)) + ; >> THIS.Toint(0) >> * Call the win API function >> StartDoc(tnhDC, lcStruct) >> ENDPROC >> >> FUNCTION Toint(tiNumber) && convert number to Intel >> * four byte string in low-byte, high-byte format >> LOCAL cString, nT >> cString = '' >> FOR nT = 1 TO 4 >> cString = cString + CHR(tiNumber%256) >> tiNumber = INT(tiNumber /256) >> ENDFOR >> RETURN cString >> >> PROCEDURE EndDoc(tnhDC) >> * Release the Heap, if allocated >> IF THIS.lnHeap <> 0 OR THIS.lnDoc <> 0 >> * Free the memory allocated above >> HeapFree(THIS.lnBeap, 0, THIS.lnDoc) >> HeapDestroy(THIS.lnHeap) >> ENDIF >> RETURN EndDoc(tnhDC) >> >> PROCEDURE StartPage(tnhDC) >> RETURN StartPage(tnhDC) >> >> PROCEDURE EndPage(tnhDC) >> RETURN EndPage(tnhDC) >> >>ENDDEFINE >> >>>>