代码之家  ›  专栏  ›  技术社区  ›  Heather M

从不从打印对话框传递的副本数,始终为1

  •  6
  • Heather M  · 技术社区  · 16 年前

    我们有一个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中引发打印对话框之间已知兼容性问题的任何信息。对于对话框控件,还有什么我可以尝试的吗?

    1 回复  |  直到 10 年前
        1
  •  8
  •   Heather M    16 年前

    我一提这个问题,答案就突然出现在我面前。

    改变 Flags 性质 VBPrnDlg 控件包含 vbprndlglib.cdlPDUseDevModeCopies 标记修复了它,副本的数量可以再次工作。

    希望这能帮助陷入类似问题的人!