Количество копий, Никогда не передаваемых из диалога печати, всегда 1

У нас есть приложение 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. Есть ли что-нибудь еще, что я могу попробовать с помощью диалоговых элементов управления?

1 ответов


ответ выскочил на меня, как только я представил этот вопрос.

изменение Flags свойства VBPrnDlg управление для включения vbprndlglib.cdlPDUseDevModeCopies флаг исправлен, количество копий снова работает.

надеюсь, это поможет кому-то застрять в подобной проблеме!