我们有一个vb6应用程序,它使用
vbprndlg.dll
用于向用户显示打印选择对话框的库。最近,我们收到了来自Windows Vista和7(32位和64位)用户的报告,说明无论在对话框的“副本数”框中放入什么,副本数始终保持为1。当在xp-pro机器上运行完全相同的代码时,副本的数量会像它应该传递给报告对象一样传递。
到目前为止,我已经使用公共对话框控件和
VBPRNDLGDLL
要在Vista和7计算机上同时显示打印对话框,并且每次报告的份数都是1,无论是在框中键入数字还是使用箭头切换按钮增加份数。其他属性-例如选择了哪台打印机,并且“从”和“到”页码报告正确。
当我硬编码到Crystal Report对象(如下所示)的副本数时,正确打印的副本数-因此这似乎更像是对话框控件而不是Crystal Report对象的问题。
下面是我正在使用的代码片段:
Dim PD As vbprndlglib.PrinterDlg
Set PD = New vbprndlglib.PrinterDlg
''//load default settings
PD.PrinterName = Printer.DeviceName
PD.DriverName = Printer.DriverName
PD.Port = Printer.Port
PD.PaperBin = Printer.PaperBin
PD.CancelError = True
PD.Min = 1
PD.Max = 32767
PD.flags = (vbprndlglib.cdlPDNoSelection Or vbprndlglib.cdlPDHidePrintToFile)
If PrintFlags And PrintDialogFlags.DisablePagesButton Then PD.flags = PD.flags Or
vbprndlglib.cdlPDNoPageNums
PD.ShowPrinter (hwnd)
''//cr is a reference to a CrystalReport object
cr.PrinterPort = PD.Port
cr.PrinterDriver = PD.DriverName
cr.PrinterName = PD.PrinterName
cr.CopiesToPrinter = PD.Copies ''//always 1 on Vista/7, correct # on XP
If PD.flags And vbprndlglib.cdlPDPageNums Then
cr.PrinterStartPage = PD.FromPage ''// these work fine
cr.PrinterStopPage = PD.ToPage
End If
''//...
cr.Action = 1 ''//prints report
End If
我似乎找不到有关在VB6和Windows Vista/7中引发打印对话框之间已知兼容性问题的任何信息。对于对话框控件,还有什么我可以尝试的吗?