Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Win98 and Printing Custom Paper Sizes
Message
 
À
09/12/2003 13:57:59
Calvin Smith
Wayne Reaves Computer Systems
Macon, Georgie, États-Unis
Information générale
Forum:
Visual FoxPro
Catégorie:
Fonctions Windows API
Divers
Thread ID:
00856403
Message ID:
00857345
Vues:
41
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
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform