我们有一个VB6应用程序,它使用vbprndlg.dll
库向用户显示打印选择对话框。最近我们收到了用户在Windows Vista和7(32位和64位)上的报告,指出无论在对话框中的副本数量框中放置什么,副本的数量始终保持为1。在XP Pro计算机上运行完全相同的代码时,副本的数量应该像报告对象一样。
到目前为止,我已经使用通用对话框控件和vbprndlg.dll
运行测试,以在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中提升打印对话框之间已知兼容性问题的任何信息。我还可以尝试使用对话框控件吗?
答案 0 :(得分:8)
一旦我提交了这个问题,答案就会突然出现。
更改Flags
控件的VBPrnDlg
属性以包含修复它的vbprndlglib.cdlPDUseDevModeCopies
标记,副本数量会再次生效。
希望这有助于某些人遇到类似的问题!