Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Win98 and Printing Custom Paper Sizes
Message
 
To
09/12/2003 13:57:59
Calvin Smith
Wayne Reaves Computer Systems
Macon, Georgia, United States
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Miscellaneous
Thread ID:
00856403
Message ID:
00857345
Views:
40
Here's the sample code for get/set information in DEVMODE structure


*------------------ CODE TO GET THE DEVMODE

FUNCTION TEST(zcDEVMODE 'BY REFERENCE' )


DECLARE INTEGER OpenPrinter IN winspool.drv;
STRING pPrinterName, INTEGER @phPrinter, INTEGER pDefault

DECLARE SHORT PrinterProperties IN WINSPOOL.DRV;
INTEGER HWND,INTEGER hPrinter

DECLARE INTEGER GetActiveWindow IN user32

DECLARE INTEGER ClosePrinter IN winspool.drv INTEGER hPrinter

DECLARE INTEGER DocumentProperties IN winspool.drv;
INTEGER HWND, INTEGER hPrinter, STRING pDeviceName,;
STRING @pDevModeOutput, STRING pDevModeInput, INTEGER fMode



*-- zcPRINTER = The printer name as returned by GETPRINTER() or driver name


*-- Get handle of current application
znHLDW = GetActiveWindow()

znOPEN = OpenPrinter(zcPRINTER, @znHLD, 0)

IF znOPEN>=1

*-- CREATES THE BUFFER SIZE to be passed to the second call to DocumentProperties
zcNEW = REPLICATE(CHR(0),DocumentProperties(znHLDW , znHLD, zcPRINTER, 0,0,0))
IF EMPTY(zcDEVMODE)
zcDEVMODE=zcNEW
ENDIF

*-- This call to documentProperties fills the var zcNEW with printer information
znRESULT = DocumentProperties(znHLDW , znHLD, zcPRINTER, @zcNEW, zcDEVMODE,
DM_IN_BUFFER+DM_OUT_BUFFER+IIF(zlNODIALOG,0,DM_IN_PROMPT))


IF znRESULT = 1
zcDEVMODE=zcNEW
ENDIF
ClosePrinter(znHLD)
ENDIF
RETURN .T.

*------------- ADJUST THE DEVMODE STRUCTURE IN THE FRX FILE

REPLACE EXPR WITH ""
REPLACE TAG WITH ?????
???? REPRESENTE TO PRINTERPROPERTIES, FOR FAST
???? THIS PART CAME FROM THE PRINTERPROPERTIES API
???? I USE A VFP CLASS FROM WWW.FOXPRINTER.COM TO GENERATE IT, STILL THERE ???

THE TAG/TAG2 FIELD REPRESENTE DEVMODE STRUCTURE,
SEE DOCUMENTPROPERTIES AND PRINTERPROPERTIES API

ADJUST THE INFORMATION IN THE DEVMODE STRUCTURE
LIKE SAID IN OTHER MESSAGE (SEE DEVMODE STRUCTURE)


PaperLenght=DEV2INT(SUBSTR(zcDEVMODE, 49,2))
PaperWidth=DEV2INT(SUBSTR(zcDEVMODE, 51,2))

zcDEVMODE=LEFT(zcDEVMODE,48)+INT2DEV(nNEW_LENGHT)+SUBSTR(zcDEVMODE,51)
zcDEVMODE=LEFT(zcDEVMODE,51)+INT2DEV(nNEW_LENGHT)+SUBSTR(zcDEVMODE,53)

STORE THIS NEW INFORMATION IN THE TAG2

REPLACE TAG2 WITH zcDEVMODE
REPLACE EXPR WITH ""



FUNCTION INT2DEV(znNEW)
.... CODE TO CONFERT A INT TO BINARY, I DIDN'T
.... CODE THIS PART, BECAUSE A USE THE PROMPT
.... PROPERTIES OF DOCUMENTPROPERTIES API
.... AND SAVE THOSE INFORMATIONS IN A FIELD
.... SO I CAN USE IT LATER...
.... I ONLY MAKE THE FUNCTION TO GET THE REAL
.... PAPER WIDTH/LENGTH


FUNCTION DEV2INT(zcINFO)
RETURN Asc(SUBSTR(zcINFO, 1,1)) + ;
(Asc(SUBSTR(zcINFO, 2,1)) * 256)




NOTE: SOME STRANGE THING APPEND WHEN USING THE PROMPT PROPERTIES,
THE PAPER LENGTH/WIDHT MIGHT NOT BE SET
YOU MIGHT HAVE TO CALL IT TWICE..


CHECK IN "UT", I THINK THAT GOT MORE STUFF...


Good Luck
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform