Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How can i print datas with richtext ?
Message
From
25/02/2004 10:58:27
 
 
To
19/02/2004 14:48:26
General information
Forum:
Visual FoxPro
Category:
ActiveVFP
Miscellaneous
Thread ID:
00878885
Message ID:
00880717
Views:
61
>how can i print datas with richtext object ?

This one, works fine for me..
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)

ENDDEFINE
HTH

Claudio
"Now to him who is able to do immeasurably more than all we ask or imagine, according to his power that is at work within us, Ephesians 3:20
Previous
Reply
Map
View

Click here to load this message in the networking platform