Subject: | Re: Printing in Pdox Version 9
| Date: | Thu, 12 Oct 2017 10:47:30 -0500
| From: | Mark Bannister <markRemove@THISinjection-moldings.com>
| Newsgroups: | pnews.paradox-discussions
|
John:
1: Always use the printersetOptions method to set your defaults after
setting the correct printer.
Second item:
If you are printing the report directly (not previewing first) you need
to switch the printer to the pdf printer first before running the
report, then set the options.
Here's some terrible code that may help you:
EXAMPLE OF CALLING THE TERRIBLE CODE:
;display the quality log report
method ReportQualityLog(loOnScreen logical; false default
) logical
var
answer logical
mysettings dynarlo
myopts PrinterOptionInfo
RI ReportPrintInfo
myr2 report
; saveprn string
params dynarattype
endvar
try
libCommon.Settings(mySettings,true)
ErrorTraponwarnings(yes)
; CODE
params["saveprn"] = ""
params["loonscreen"] = loOnScreen
params["Subject"] = "[QualityLog:"+ string(date() )+"]"
params["File_FilePath"] = libcommon.getConstant ( "PDFLocker" )
params["File_NewFileName"] = libcommon.getConstant ( "PDFLocker" )
myopts.Orientation = PrintPortrait
+
iif(libstrings.cmlastcharST(libcommon.getConstant ( "PDFLocker"
))="\\","","\\")
+ "QualityLog_
"+string(date())
;/// display a menu with available printers, letting user pick where to
print
if NOT libCommon.printerPick ( myopts ,params ) then
fail ( UserError + 1 , "" )
endIf
;// do the printing
ri.name = ":mngrforms:I0qualitylog.rsl"
ri.panelOptions = PrintClipToWidth
ri.Orient = PrintPortrait
if params["loOnScreen"] then
myr2.open(ri)
sleep()
myr2.DesignModified=false
else
myr2.print(ri)
sleep()
endif
;ENDCODE^^^^^^
answer = true
onfail
libCommon.Errorlogshow(libCommon.Errorlogger())
answer=false
params["File_Action"] = File_CancelActionCT
libMisc.File_WaitonNewFile( params)
endtry
libCommon.Settings(mySettings,false)
libcommon.printerPick_Restore ( Params )
return(answer)
endMethod
{ 10-2008
Front end to PrinterSetup
lets you select a printer
and then calls PrinterSetup
example :
try
saveprn =""
myopts.Orientation = PrintPortrait
myopts.Duplex = prnHorizontal
if NOT libCommon.printerPick(loOnscreen,myopts,saveprn) then
fail(UserError+1,"")
endif
..do printing
onfail
..
endtry
;restore default
if saveprn<>"" then
if not printerSetCurrent(SavePrn) then
msgStop("Print Config","Did not restore printer.")
endif
endif
}
proc __checkPDF( )logical
var
answer logical
mysettings dynarlo
endvar
try
if getConstant ( "PDFPRN" ) = "" or getConstant ( "PDFLocker" )
= "" then
if msgQuestion ( "Constant(s) Undefined" , "You must set the
preferences for PDF printing."
+ iif ( getConstant ( "PDFPRN" ) = "" , "\nSet PDF
Printer, Printing local consant" , "" )
+ iif ( getCOnstant ( "PDFLocker" ) = "" , "\nSet
PDF folder, PDF User's Constant" , "" )
+ "\n\nOpen Preferences form?" ) = "Yes" then
LibForms.openForm ( "" , "s0constantsNew" , "mngrforms"
, true , blank ( ) )
endIf
answer = False
else
answer = true
endIf
;code
onfail
Errorlogshow(ErrorloggerAddMsg(FormNameGL+"printerpick.__checkPDF"))
; libCommon.Errorclosetc(ordertc,answer)
answer=false
endtry
return(answer)
endproc
method PrinterPick ( ;var loOnScreen Logical ;False -
myopts PrinterOptionInfo
; , var stsaveprn String
, var params dynarattype
;, var stans string ;what we
selected if blank will display menu
) Logical ;// returns false if did not print!
var
answer Logical
mysettings dynarlo
mypop
, mypop2 PopUpMenu
myprn
String
CurrPRNInfo printerinfo
stprn string
loonscreen LOgical
stsaveprn,stParams, stans string
endVar
try
openlibs() ;insp_20141203
; SetMouseShape ( Mousewait , true )
; DelayScreenUpdates(yes)
ErrorTraponwarnings ( yes )
; printerGetInfo ( CurrPRNInfo )
stParams="loOnScreen:LFalse" ;// was there an error?
+","+MenuPickCT ;// email, Print to PDF, etc
+",File_FilePath:A" ;\\ path to new file default = H:
; +",File_FileExtension:A" ;\\ file extension to look for w/o .
+",File_FileMatchName:A" ;\\ if we know some part of the
new file name supply it
+",File_NewFileName:A" ;\\ what to call our new file,
blank will use random
+",Stripplus:Ltrue,ignoreExtraParams:LTrue"
if NOT libmisc.cmArrayCheckAT(params, stparams) then
fail(userError+4,"paramters invalid")
endif
stSavePrn = ""
myprn = ""
stans = params[MenuPickCT]
if stans = "" then
if NOT PrinterPick_Menus( mypop ) then
fail(userError+4,"")
endif
mypop.addtext ( "Cancel" )
stans = mypop.show ( )
params[MenuPickCT] = stans
SetMouseShape ( Mousewait , true )
endif
loOnScreen = ( stans = "Print Preview" )
switch
case stans = "Print Preview" :
loOnScreen = True
{ case stans = "Printer: " + CurrPRNInfo.devicename:
loOnScreen = False
}
case stans = "Print to PDF" or stans ="Email" :
if NOT __checkPDF() then
fail(userError+1,"")
endif
params["Email_SendEmail"] = (Stans="Email")
loOnScreen = False
myprn = getConstant ( "PDFPRN" )
;// set up pdf printer and the printerpickRestore
will take care of the rest
params["File_Action"] = File_SetupActionCT
if NOT libmisc.File_WaitonNewFile( params ) then
fail ( USErError + 4 , "" )
endIf
case stans = "Cancel" or stans = "" :
fail ( UserError + 2 , "" ) ;insp_20141203
changed to user cancel
case stans.match("Printer: ..", stprn ) :
myprn = stprn
loOnScreen = False
otherwise :
;// not aprinter choise
endSwitch
if myprn <> "" or loOnScreen then
if NOT loOnScreen then
if NOT PrinterSetup ( myprn , myopts , stsaveprn ) then
fail ( UserError + 1 , "" )
endIf
endif
answer = True
else
answer = False
endIf
params["Saveprn"] = stsaveprn
params["loOnScreen"] = loOnScreen
Menu_Parkmenu() ;// move the menu bar out of the way of the
report
onFail
Errorlogshow ( Errorloggeraddmsg (FormNameGL+"PRinterPick" ) )
; libCommon.Errorclosetc(,answer)
Timercontrol( TimerWaitonFileCT, true )
answer = false
endTry
;libCommon.Settings(mySettings,false)
;SetMouseShape(MouseArrow,false)
;DelayScreenUpdates(No)
return ( answer )
EndMethod
method PrinterPick_Menus(var mypop popupmenu) logical
var
answer logical
mysettings dynarlo
prnar Array [ ] String
mypop2 popupmenu
li1 longint
CurrPRNInfo printerinfo
endvar
try
openlibs()
; libCommon.Settings(mySettings,true)
;SetMouseShape(Mousewait,true)
;ErrorTraponwarnings(yes)
;code
printerGetInfo ( CurrPRNInfo )
mypop.addtext ( "Print Preview" )
mypop.addtext ( "Printer: " + CurrPRNInfo.devicename )
enumprinters ( prnar )
for li1 from 1 to prnar.size()
mypop2.addtext("Printer: "+ prnar[ li1 ] )
endfor
mypop.addpopup ( "Print to.." , mypop2 )
mypop.addtext ("Print to PDF")
mypop.addtext ("Email")
answer = true
onfail
Errorlogshow(ErrorloggerAddMsg(FormNameGL+"PrinterPick_Menus"))
; libCommon.Errorclosetc(ordertc,answer)
answer=false
endtry
;Settings(mySettings,false)
;SetMouseShape(MouseArrow,false)
;DelayScreenUpdates(No)
return(answer)
endMethod
{
after printing we will restore the printer
we will also launch wait on file and email if applicable
}
method printerPick_Restore (var params dynarattype) logical
var
answer logical
mysettings dynarlo
stParams string
endvar
try
openlibs()
Settings(mySettings,true)
;SetMouseShape(Mousewait,true)
;DelayScreenUpdates(yes)
ErrorTraponwarnings(yes)
; CODE
stParams="saveprn:A" ;// name of printer to restore
+",loError:LFalse" ;// was there an error?
+","+MenuPickCT ;// email, Print to PDF, etc
+",Stripplus:Ltrue,ignoreExtraParams:LTrue"
if NOT libmisc.cmArrayCheckAT(params, stparams) then
fail(userError+4,"paramters invalid")
endif
if params["saveprn"] <> "" then
if not printerSetCurrent ( params["saveprn"] ) then
libforms.bb_Statusmsg("Did not restore printer",
statusmsgwarningCT )
endIf
endIf
;ENDCODE^^^^^^
answer = True
onfail
Errorlogshow(ErrorloggerAddMsg(FormNameGL+"printerPick_Restore"))
; libCommon.Errorclosetc(,answer)
Timercontrol( TimerWaitonFileCT, true )
answer=false
endtry
Settings(mySettings,false)
;SetMouseShape(MouseArrow,false)
;DelayScreenUpdates(No)
return(answer)
endMethod
{ 10-2008 Better call is to use PrinterPick which calls this method
it allows you to pick a printer
}
method printerSetup ( myprinter String
, var myopts PrinterOptionInfo
, var saveprn String
) Logical
{
myprinter = name of printer to change to if "" then
use windows default printer
myopt = printer options --set only ones you need to change
saveprn = returns the name of the old printer so you can restore it
example of use
if NOT printerSetup(LibCommon.GetConstant("SINGLELABELPRN",Labopts,
saveprn) then
errro proces
else
;do some printing
endif
;restore default
if not printerSetCurrent(SavePrn) then
msgStop("Print Config","Did not restore printer.")
endif
}
var
ranswer String
answer Logical
Curropts PrinterOptionInfo
Labopts PrinterOptionInfo
holdopts PrinterInfo
lar Array [ ] String
arPrinters ,
arPrnNames ,
par Array [ ] String
stDrvName ,
stPrnName ,
stPrnInfo String
i SmallInt
CurrPRNInfo printerinfo
hold String
Changedit Logical
;\\ Saveprn string
labtc TCursor
labellen SmallInt
lrep Report
endVar
changedit = false
try
openlibs()
enumPrinters ( arPrinters ) ;\\ Get a list of installed
printers.
;\\ arprinters.view()
printerGetOptions ( CurrOpts )
;\\curropts.view()
printerGetInfo ( CurrPRNInfo )
saveprn = CurrPrnInfo.DeviceName + "," +
CurrPrnInfo.DriverName + "," + CurrPrnInfo.PortName
if myprinter.search ( "," ) > 0 then
myprinter.breakapart ( par , "," )
myprinter = par [ 1 ]
endIf
answer = false
for i from 1 to arPrinters.size ( )
stPrnInfo = arPrinters [ i ]
;\\ Info is separated by commas.
stPrnInfo.breakApart ( arPrnNames , "," )
;\\ After breakApart, array item 1 is the printer name,
;\\ array item 2 is the driver name.
hold = arprnNames [ 1 ] .lower ( )
;\\ if (arprnNames[3]= MYPRINTER) then
libforms.BB_StatusMsg(hold , statusMsgOKCT)
if MYPRINTER = "" then
changedit = true
;\\look for default printer since none specified
printerSetCurrent ( StPrnInfo )
printerGetInfo ( holdopts )
if holdopts.DefaultPrinter then
answer = True
answer = printerSetOptions ( MYOPTS )
quitLoop
endIf
else
if ( arprnNames [ 1 ] .lower ( ) = MYPRINTER.lower
( ) ) then
answer = true
if printerSetCurrent ( stPrnInfo ) then
;msgInfo("Current printer:", arPrnNames[1])
changedit = true
;\\ answer = printerSetOptions(MYOPTS)
if not printerSetOptions ( MYOPTS ) then
errorshow ( )
answer = false
endIf
else
answer = false
endIf
quitLoop
endIf
endIf
endFor
if not answer then
msgstop ( "Error" , "Could not find printer named: \""
+ MYPRINTER + "\"\nPlease check constants for correct printer name." )
errorlog ( usererror , "Could not find printer named: "
+ MYPRINTER )
libforms.BB_StatusMsg(MYPRINTER+" not found." ,
statusMsgWarningCT)
else
libforms.BB_StatusMsg("Printer Set" , statusMsgOKCT)
endIf
onFail
ErrorLogShow ( ErrorLogger ( ) )
answer = false
if changedIt then
if not printerSetCurrent ( SavePrn ) then
msgStop ( "Print Config" , "Did not restore
printer." )
endIf
endIf
endTry
return ( answer )
EndMethod
On 10/12/2017 10:10 AM, John Wright wrote:
> Because of Paradox 8 no longer running in Win10 I have had to move to
> using PDox9 all of the time. I have obviously had it and used it
> previously but always prefered some of the ways in which PDox8
> 'operated'. One of the things that has come to light is that when I go
> to print, PDox9 seems to want to Default to "Create horizontal overflow
> pages as needed". When I was using Pdox8 it invariably Defaulted to
> "Clip to page width". It also seems that when initially changing to the
> latter in the print output dialog box it still defaults back to the
> Horizontal etc. However, changing it again to Clip to page etc. then
> outputs as that. Any ideas why this should be?
>
> I have also noticed that itially outputing to an installed PDF Printer
> often now creates a poor output as though the resolution of the printer
> needs increasing but a second output seems to correct it without
> changing anything from the default setting! Any further comments
> appreciated.
>
> In all the instances so far the actual Report Output seems quite normal!
>
> John Wright
|