LOCAL lcPrinter, oPrinter wait window nowait noclear "Printing.. " lcPrinter = GETPRINTER() lcTitle = "RTF Printout" oPrinter = CREATEOBJECT("PrintObj",lcPrinter) WITH oPrinter .StartDoc(.hDC, lcTitle) .StartPage(.hDC) ThisForm.myRTFcontrol.SelPrint(.hDC) .EndPage(.hDC) .EndDoc(.hDC) ENDWITH RELEASE oPrinter wait clear return DEFINE CLASS PrintObj AS LINE hDC = 0 PROTECTED lnHeap, lnDoc lnHeap = 0 lnDoc = 0 lnBeap = 0 PROCEDURE INIT(tcPrinter) * THIS.DeclareDLLs() * 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 INTEGER Istrcpy IN Win32Api INTEGER, STRING ENDPROC PROCEDURE StartDoc(tnhDC, toDocName) * tcDocName = IIF(TYPE("tcDocName")<> "C","", tcDocName) LOCAL lnHeap, lnDoc, lcStruct * THIS.lnHeap = HeapCreate(0, 8192, 8192) THIS.lnDoc = HeapAlloc(THIS.lnHeap, 0, LEN(tcDocName)+1 ) *Istrcpy( THIS.lnDoc, tcDocName ) * lcStruct = THIS.Toint(12) + ; THIS.Toint( ; IIF(EMPTY(tcDocName), 0, THIS.lnDoc)) + ; THIS.Toint(0) * StartDoc(tnhDC, lcStruct) ENDPROC FUNCTION Toint(tiNumber) && convert number to Intel * LOCAL cString, nT cString = '' FOR nT = 1 TO 4 cString = cString + CHR(tiNumber%256) tiNumber = INT(tiNumber /256) ENDFOR RETURN cString PROCEDURE EndDoc(tnhDC) * 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) ENDDEFINEHTH