Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
File AddPrinterFormClass.prg file does not exists
Message
From
25/12/2004 06:39:29
Cetin Basoz
Engineerica Inc.
Izmir, Turkey
 
 
To
25/12/2004 04:55:19
General information
Forum:
Visual FoxPro
Category:
Other
Environment versions
Visual FoxPro:
VFP 6
OS:
Windows XP
Network:
Windows XP
Database:
Visual FoxPro
Miscellaneous
Thread ID:
00972127
Message ID:
00972130
Views:
18
Tariq,
Either move the code beginning with "*AddPrinterFormClass.prg" line to another file named "AddPrinterFormClass.prg" or remove "AddPrinterFormClass.fxp" from NewObject(). Former is better.
Cetin

>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
>
>
Çetin Basöz

The way to Go
Flutter - For mobile, web and desktop.
World's most advanced open source relational database.
.Net for foxheads - Blog (main)
FoxSharp - Blog (mirror)
Welcome to FoxyClasses

LinqPad - C#,VB,F#,SQL,eSQL ... scratchpad
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform