Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Create custom report size with prg
Message
De
21/12/2004 08:14:18
 
 
À
21/12/2004 00:52:07
Information générale
Forum:
Visual FoxPro
Catégorie:
Gestionnaire de rapports & Rapports
Versions des environnements
Visual FoxPro:
VFP 6
OS:
Windows XP
Network:
Windows XP
Database:
Visual FoxPro
Divers
Thread ID:
00970889
Message ID:
00970936
Vues:
12
Hi Tariq,

from a quick glance at the code you need to take the section from the comment:

*AddPrinterFormClass.prg
and put that in its own program called AddPrinterFormClass.prg, otherwise put it somewhere else and change the ooo = NEWOBJECT("AddPrinterForm", "AddPrinterFormClass.fxp") to look somewhere else.

Hope that helps.

>Dear Sir,
>
>I am using Windows XP and have HP LaserJet 1100 printer. I want to create a paper of 7"x3".
>To do this use following codes, taken by Universal thread under this link
>
>http://www.levelextreme.com/wconnect/wc.dll?LevelExtreme~2,84,14,22445,
>
>The proble is when I run prg then following error message appears
>
> "File AddPrinterFormClass.prg file does not exists."
>
>What is mistake, Please help
>
>
>
>
>* All sizes in inches
>ooo = NEWOBJECT("AddPrinterForm", "AddPrinterFormClass.fxp")
>IF NOT ooo.AddForm("MyCustomForm1", 7,3, "Hp laserjet 1100")
>	? ooo.cErrorMessage
>	? ooo.cApiErrorMessage
>  * Error
>ENDIF
>ooo = Null
>*RETURN
>* All sizes in cm
>*ooo = NEWOBJECT("AddPrinterForm", "AddPrinterFormClass.fxp", "", "Metric")
>*IF NOT ooo.AddForm("MyCustomForm2", 15,17, "Hp laserjet 1100")
>  * Error
>*ENDIF
>*ooo = Null
>
>ooo = NEWOBJECT("AddPrinterForm", "AddPrinterFormClass.fxp")
>IF NOT ooo.DeleteForm("MyCustomForm1", "Hp laserjet 1100")
>	? ooo.cErrorMessage
>	? ooo.cApiErrorMessage
>  * Error
>ENDIF
>*AddPrinterFormClass.prg
>* 10/26/2004 -- Added function Sys2600() so code can be run in VFP6 and earlier
>DEFINE CLASS AddPrinterForm AS Custom
>
>	HIDDEN cUnit, cPrinterName, nFormHeight, nFormWidth, nLeftMargin, ;
>              nTopMargin, nRightMargin, nBottomMargin, ;
>	      nInch2mm, nCm2mm, nCoefficient, hHeap
>
>	cUnit = "English"		&& inches or Metric - cm's
>	cPrinterName = ""
>	nFormHeight = 0
>	nFormWidth = 0
>	nLeftMargin = 0
>	nTopMargin = 0
>	nRightMargin = 0
>	nBottomMargin = 0
>
>	nApiErrorCode = 0
>	cApiErrorMessage = ""
>	cErrorMessage = ""
>
>	nInch2mm = 25.4
>	nCm2mm = 10
>	nCoefficient = 0
>
>	hHeap = 0
>
>	PROCEDURE Init(tcUnit)
>	IF PCOUNT() = 1 AND INLIST(tcUnit, "English", "Metric")
>		This.cUnit = PROPER(tcUnit)
>	ENDIF
>	This.LoadApiDlls()
>	This.hHeap = HeapCreate(0, 4096, 0)
>	* Use Windows default printer
>	This.cPrinterName = SET("Printer",2)
>	This.nCoefficient = IIF(PROPER(This.cUnit) = "English", ;
>		This.nInch2mm, This.nCm2mm) * 1000
>	ENDPROC
>
>	PROCEDURE Destroy
>	IF This.hHeap <> 0
>		HeapDestroy(This.hHeap)
>	ENDIF
>
>	ENDPROC
>
>	PROCEDURE SetFormMargins(tnLeft, tnTop, tnRight, tnBottom)
>	WITH This
>		.nLeftMargin 	= tnLeft   * .nCoefficient
>		.nTopMargin 	= tnTop    * .nCoefficient
>		.nRightMargin 	= tnRight  * .nCoefficient
>		.nBottomMargin 	= tnBottom * .nCoefficient
>	ENDWITH
>	ENDPROC
>
>	PROCEDURE AddForm(tcFormName, tnWidth, tnHeight, tcPrinterName)
>	LOCAL lhPrinter, llSuccess, lcForm
>
>	This.nFormWidth  = tnWidth  * This.nCoefficient
>	This.nFormHeight = tnHeight * This.nCoefficient
>	IF PCOUNT() > 3
>		This.cPrinterName = tcPrinterName
>	ENDIF
>
>	This.ClearErrors()
>	lhPrinter = 0
>	IF OpenPrinter(This.cPrinterName, @lhPrinter, 0) = 0
>		This.cErrorMessage = "Unable to get printer handle for '" ;
>                                + This.cPrinterName + "."
>		This.nApiErrorCode = GetLastError()
>		This.cApiErrorMessage = This.ApiErrorText(This.nApiErrorCode)
>		RETURN .F.
>	ENDIF
>
>	lnFormName = HeapAlloc(This.hHeap, 0, LEN(tcFormName) + 1)
>        * VFP7 and later
>	= SYS(2600, lnFormName, LEN(tcFormName) + 1, tcFormName + CHR(0))
>        * VFP6 and earlier
>	*= Sys2600(lnFormName, LEN(tcFormName) + 1, tcFormName + CHR(0))
>
>	* Build FORM_INFO_1 structure
>	WITH This
>		lcForm = This.Num2LOng(0) + ;		&& Flags
>		This.Num2LOng(lnFormName) + ;
>			This.Num2LOng(.nFormWidth) + ;
>			This.Num2LOng(.nFormHeight) + ;
>			This.Num2LOng(.nLeftMargin) + ;
>			This.Num2LOng(.nTopMargin) + ;
>			This.Num2LOng(.nFormWidth - .nRightMargin) + ;
>			This.Num2LOng(.nFormHeight - .nBottomMargin)
>	ENDWITH
>
>	* Finally, call the API
>	IF AddForm(lhPrinter, 1, @lcForm) = 0
>		This.cErrorMessage = "Unable to Add Form '" + tcFormName + "'."
>		This.nApiErrorCode = GetLastError()
>		This.cApiErrorMessage = This.ApiErrorText(This.nApiErrorCode)
>		llSuccess = .F.
>	ELSE
>		llSuccess = .T.
>	ENDIF
>	= HeapFree(This.hHeap, 0, lnFormName)
>	= ClosePrinter(lhPrinter)
>
>	RETURN llSuccess
>
>	PROCEDURE ClearErrors
>	This.cErrorMessage = ""
>	This.nApiErrorCode = 0
>	This.cApiErrorMessage = ""
>	ENDPROC
>	>	PROCEDURE DeleteForm(tcFormName, tcPrinterName)
>	LOCAL lhPrinter, llSuccess
>
>	IF PCOUNT() > 1
>		This.cPrinterName = tcPrinterName
>	ENDIF
>
>	This.ClearErrors()
>	lhPrinter = 0
>	IF OpenPrinter(This.cPrinterName, @lhPrinter, 0) = 0
>		This.cErrorMessage = "Unable to get printer handle for '" + This.cPrinterName +
>
>"."
>		This.nApiErrorCode = GetLastError()
>		This.cApiErrorMessage = This.ApiErrorText(This.nApiErrorCode)
>		RETURN .F.
>	ENDIF
>
>	* Finally, call the API
>	IF DeleteForm(lhPrinter, tcFormName) = 0
>		This.cErrorMessage = "Unable to delete Form '" + tcFormName + "'."
>		This.nApiErrorCode = GetLastError()
>		This.cApiErrorMessage = This.ApiErrorText(This.nApiErrorCode)
>		llSuccess = .F.
>	ELSE
>		llSuccess = .T.
>	ENDIF
>	= ClosePrinter(lhPrinter)
>	RETURN llSuccess
>	>	FUNCTION Num2LOng(tnNum)
>	DECLARE RtlMoveMemory IN WIN32API AS RtlCopyLong ;
>		STRING @Dest, Long @Source, Long Length
>	LOCAL lcString
>	lcString = SPACE(4)
>	=RtlCopyLong(@lcString, BITOR(tnNum,0), 4)
>	RETURN lcString
>	ENDFUNC
>
>	FUNCTION Long2Num(tcLong)
>	DECLARE RtlMoveMemory IN WIN32API AS RtlCopyNum ;
>		Long @Dest, String @Source, Long Length
>	LOCAL lnNum
>	lnNum = 0
>	= RtlCopyNum(@lnNum, tcLong, 4)
>	RETURN lnNum
>	ENDFUNC
>
>	HIDDEN PROCEDURE ApiErrorText
>		LPARAMETERS tnErrorCode
>		Local lcErrBuffer
>		lcErrBuffer = REPL(CHR(0),1024)
>		= FormatMessage(0x1000 ,.NULL., tnErrorCode, 0, @lcErrBuffer, 1024,0)
>		RETURN STRTRAN(LEFT(lcErrBuffer, AT(CHR(0),lcErrBuffer)- 1 ), ;
>                         "file", "form", -1, -1, 3)
>
>		ENDPROC
>
>	HIDDEN PROCEDURE LoadApiDlls
>		DECLARE INTEGER OpenPrinter IN winspool.drv;
>			STRING  pPrinterName,;
>			INTEGER @phPrinter,;
>			INTEGER pDefault
>		DECLARE INTEGER ClosePrinter IN winspool.drv;
>			INTEGER hPrinter
>		DECLARE INTEGER AddForm IN winspool.drv;
>			INTEGER hPrinter,;
>			INTEGER LEVEL,;
>			STRING  @pForm
>		DECLARE INTEGER DeleteForm IN winspool.drv;
>			INTEGER hPrinter,;
>			STRING  pFormName
>		DECLARE INTEGER HeapCreate IN Win32API;
>			INTEGER dwOptions, INTEGER dwInitialSize,;
>			INTEGER dwMaxSize
>		DECLARE INTEGER HeapAlloc IN Win32API;
>			INTEGER hHeap, INTEGER dwFlags, INTEGER dwBytes
>		DECLARE lstrcpy IN Win32API;
>			STRING @lpstring1, INTEGER lpstring2
>		DECLARE INTEGER HeapFree IN Win32API;
>			INTEGER hHeap, INTEGER dwFlags, INTEGER lpMem
>		DECLARE HeapDestroy IN Win32API;
>			INTEGER hHeap
>		DECLARE INTEGER GetLastError IN kernel32
>		Declare Integer FormatMessage In kernel32.dll ;
>			Integer dwFlags, String @lpSource, ;
>			Integer dwMessageId, Integer dwLanguageId, ;
>			String @lpBuffer, Integer nSize, Integer Arguments
>
>		ENDPROC
>
>ENDDEFINE
>*-------------------------------------------------------
>
>FUNCTION Sys2600(tnAddress, tnLength, tcNewString)
>
>IF PCOUNT() = 3
>	DECLARE RtlMoveMemory IN WIN32API AS RtlCopy ;
>		INTEGER nDestBuffer, STRING pVoidSource, INTEGER nLength
>	lcRetVal = LEFT(tcNewString, MIN(tnLength, LEN(tcNewString)))
>	=RtlCopy(tnAddress, lcRetVal, LEN(lcRetVal))
>ELSE
>	DECLARE RtlMoveMemory IN WIN32API AS RtlCopy ;
>		STRING @DestBuffer, INTEGER pVoidSource, INTEGER nLength
>	lcRetVal = REPL(CHR(0),tnLength)
>	=RtlCopy(@lcRetVal, tnAddress, tnLength)
>ENDIF		
>RETURN lcRetVal
>
>
>
Frank.

Frank Cazabon
Samaan Systems Ltd.
www.samaansystems.com
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform