Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Printer DevMode Problem
Message
 
To
All
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Title:
Printer DevMode Problem
Environment versions
Visual FoxPro:
VFP 9 SP2
OS:
Vista
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01321434
Message ID:
01321434
Views:
101
Hi

I am using an ActiveX control to print RTF files. Since this will be used in an automated environment I need to be able to configure the printer settings without user intervention. So after reading articles about the WinAPI and articles by other VFP programmers such as Barbara Peisch I began testing the following code. The print parameters are contained in object (oPrintParam) which is attached to my main application object (goApp). So I wrote a program to convert the parameters into a Printer DevMode Structure which I then write to the printer using Sys(1037).

However it appears to have no effect on the printer settings and the document is not printed with the correct orientation or copies etc.

I have not been able to see what I have done wrong. Can anyone tell me what might be wrong with this code?

Thanks,
Simon
*
* SetPrinterDevMode.prg -- Modifies the printer's DevMode for Orientation, Paper Tray, Copies and Paper Size
*
Local lcRpt
lcRpt=Sys(2015)
=PushWorkArea()
Select 0
Create Cursor Temp (Test C(10))
Select 0
Create Report (gcTmp+lcRpt+".frx") From Temp
Use In Select("Temp")
Use (gcTmp+lcRpt+".frx") Exclu Alias UPDevMod

Set Printer to Name (goApp.oPrintParam.Printer)
*
* Write printer environment to cursor
*
Sys(1037,2)
Replace Next 1 UPDevMod.Tag2 With ConfigureDevMode(goApp.oPrintParam,UPDevMod.Tag2)
*
* Write modified printer environment to printer
*
Sys(1037,3)
Use In Select("UPDevMod")
=PopWorkArea()

myole.Print()

*
* I have tried opening a text file with "Modi Comm" and then printing the
* thinking it should honour the settings I modified above but this does
* not work.
*
*
Return

Function ConfigureDevMode
   LParameters toParam,tcDevMode
   Local lnPaperSize
   
   tcDevMode=Stuff(tcDevMode,DM_ORIENTATION_OFFSET,2,BinToC(Iif(toParam.Orientation="Portrait",1,2),"2sr"))
   
   tcDevMode=Stuff(tcDevMode,DM_COPIES_OFFSET,2,BinToC(toParam.Copies,"2sr"))

*
* Convert my Paper Size parameters to the ones used in the WinAPI
*   
   Do Case
   Case toParam.PaperSize=Transform(VPAPER_A4)
      lnPaperSize=DMPAPER_A4
   Case toParam.PaperSize=Transform(VPAPER_LETTER)
      lnPaperSize=DMPAPER_LETTER
   Case toParam.PaperSize=Transform(VPAPER_LEGAL)
      lnPaperSize=DMPAPER_LEGAL
   Case toParam.PaperSize=Transform(VPAPER_CSHEET)
      lnPaperSize=DMPAPER_CSHEET
   Case toParam.PaperSize=Transform(VPAPER_DSHEET)
      lnPaperSize=DMPAPER_DSHEET
   Case toParam.PaperSize=Transform(VPAPER_ESHEET)
      lnPaperSize=DMPAPER_ESHEET
   Case toParam.PaperSize=Transform(VPAPER_LETTERSMALL)
      lnPaperSize=DMPAPER_LETTERSMALL
   Case toParam.PaperSize=Transform(VPAPER_TABLOID)
      lnPaperSize=DMPAPER_TABLOID
   Case toParam.PaperSize=Transform(VPAPER_LEDGER)
      lnPaperSize=DMPAPER_LEDGER
   Case toParam.PaperSize=Transform(VPAPER_STATEMENT)
      lnPaperSize=DMPAPER_STATEMENT
   Case toParam.PaperSize=Transform(VPAPER_EXECUTIVE)
      lnPaperSize=DMPAPER_EXECUTIVE
   Case toParam.PaperSize=Transform(VPAPER_A3)
      lnPaperSize=DMPAPER_A3
   Case toParam.PaperSize=Transform(VPAPER_A4SMALL)
      lnPaperSize=DMPAPER_A4SMALL
   Case toParam.PaperSize=Transform(VPAPER_A5)
      lnPaperSize=DMPAPER_A5
   Case toParam.PaperSize=Transform(VPAPER_B4)
      lnPaperSize=DMPAPER_B4
   Case toParam.PaperSize=Transform(VPAPER_B5)
      lnPaperSize=DMPAPER_B5
   Case toParam.PaperSize=Transform(VPAPER_FOLIO)
      lnPaperSize=DMPAPER_FOLIO
   Case toParam.PaperSize=Transform(VPAPER_QUARTO)
      lnPaperSize=DMPAPER_QUARTO
   Case toParam.PaperSize=Transform(VPAPER_10X14)
      lnPaperSize=DMPAPER_10X14
   Case toParam.PaperSize=Transform(VPAPER_11X17)
      lnPaperSize=DMPAPER_11X17
   Case toParam.PaperSize=Transform(VPAPER_NOTE)
      lnPaperSize=DMPAPER_NOTE
   Case toParam.PaperSize=Transform(VPAPER_ENV_9)
      lnPaperSize=DMPAPER_ENV_9
   Case toParam.PaperSize=Transform(VPAPER_ENV_10)
      lnPaperSize=DMPAPER_ENV_10
   Case toParam.PaperSize=Transform(VPAPER_ENV_11)
      lnPaperSize=DMPAPER_ENV_11
   Case toParam.PaperSize=Transform(VPAPER_ENV_12)
      lnPaperSize=DMPAPER_ENV_12
   Case toParam.PaperSize=Transform(VPAPER_ENV_14)
      lnPaperSize=DMPAPER_ENV_14
   Case toParam.PaperSize=Transform(VPAPER_ENV_DL)
      lnPaperSize=DMPAPER_ENV_DL
   Case toParam.PaperSize=Transform(VPAPER_ENV_C5)
      lnPaperSize=DMPAPER_ENV_C5
   Case toParam.PaperSize=Transform(VPAPER_ENV_C3)
      lnPaperSize=DMPAPER_ENV_C3
   Case toParam.PaperSize=Transform(VPAPER_ENV_C4)
      lnPaperSize=DMPAPER_ENV_C4
   Case toParam.PaperSize=Transform(VPAPER_ENV_C6)
      lnPaperSize=DMPAPER_ENV_C6
   Case toParam.PaperSize=Transform(VPAPER_ENV_C65)
      lnPaperSize=DMPAPER_ENV_C65
   Case toParam.PaperSize=Transform(VPAPER_ENV_B4)
      lnPaperSize=DMPAPER_ENV_B4
   Case toParam.PaperSize=Transform(VPAPER_ENV_B5)
      lnPaperSize=DMPAPER_ENV_B5
   Case toParam.PaperSize=Transform(VPAPER_ENV_B6)
      lnPaperSize=DMPAPER_ENV_B6
   Case toParam.PaperSize=Transform(VPAPER_ENV_ITALY)
      lnPaperSize=DMPAPER_ENV_ITALY
   Case toParam.PaperSize=Transform(VPAPER_ENV_MONARCH)
      lnPaperSize=DMPAPER_ENV_MONARCH
   Case toParam.PaperSize=Transform(VPAPER_ENV_PERSONAL)
      lnPaperSize=DMPAPER_ENV_PERSONAL
   Case toParam.PaperSize=Transform(VPAPER_FANFOLD_US)
      lnPaperSize=DMPAPER_FANFOLD_FANFOLD_US
   Case toParam.PaperSize=Transform(VPAPER_FANFOLD_STD_GERMAN)
      lnPaperSize=DMPAPER_FANFOLD_STD_GERMAN
   Case toParam.PaperSize=Transform(VPAPER_FANFOLD_LGL_GERMAN)
      lnPaperSize=DMPAPER_FANFOLD_LGL_GERMAN
   EndCase
   tcDevMode=Stuff(tcDevMode,DM_PAPERSIZE_OFFSET,2,BinToC(lnPaperSize,"2sr"))

   If toParam.Tray<>"-1"
      tcDevMode=Stuff(tcDevMode,DM_DEFAULTSOURCE_OFFSET,2,BinToC(Val(toParam.Tray),"2sr"))
   EndIf
   
   Return tcDevMode
EndFunc  
Simon White
dCipher Computing
Next
Reply
Map
View

Click here to load this message in the networking platform