Tenemos una aplicación VB6 que usa la biblioteca vbprndlg.dll
para mostrar los diálogos de selección de impresión al usuario. Recientemente, hemos recibido informes de usuarios de Windows Vista y 7 (tanto 32 como 64 bits) que indican que el número de copias siempre permanece 1, sin importar lo que pongan en el cuadro de número de copias en el cuadro de diálogo. Cuando se ejecuta exactamente el mismo código en una máquina XP Pro, el número de copias pasa como debería al objeto de informe.Número de copias que nunca pasan desde el cuadro de diálogo de impresión, siempre 1
Hasta ahora he realizado pruebas utilizando el control de diálogo común y vbprndlg.dll
para generar cuadros de diálogo de impresión en una computadora Vista y una 7, y siempre se informa que el número de copias es 1, no importa si escribo el número en la casilla o use los botones de flecha para aumentar el número de copias. Otras propiedades, como qué impresora se selecciona y los números de página y de origen se informan correctamente.
Cuando codifico el número de copias del objeto Crystal Report (que se muestra a continuación), imprime el número correcto de copias, por lo que parece más un problema con el control de diálogo en lugar del objeto Crystal Report.
Aquí hay un fragmento del código que estoy usando:
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
Me parece que no puede encontrar ninguna información acerca de los problemas de compatibilidad conocidos entre elevar los cuadros de diálogo de impresión en VB6 y Windows Vista/7. ¿Hay algo más que pueda probar con los controles de diálogo?
Me funcionó. Probado en Win 7 32 bits, win Xp no necesita esta bandera: D: D: D –