2010-08-04 12 views
6

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?

Respuesta

8

La respuesta apareció tan pronto como envié esta pregunta.

Cambiando la propiedad Flags del control VBPrnDlg para incluir el indicador vbprndlglib.cdlPDUseDevModeCopies se arregló, el número de copias funciona nuevamente.

¡Espero que esto ayude a alguien atrapado en un problema similar!

+1

Me funcionó. Probado en Win 7 32 bits, win Xp no necesita esta bandera: D: D: D –

Cuestiones relacionadas