Abbiamo un'applicazione VB6 che utilizza la libreria vbprndlg.dll
per mostrare all'utente le finestre di dialogo di selezione della stampa. Di recente, abbiamo ricevuto segnalazioni dagli utenti di Windows Vista e 7 (sia a 32 che a 64 bit) in cui si afferma che il numero di copie rimane sempre 1 indipendentemente dal numero di copie nella finestra di dialogo. Quando si esegue lo stesso identico codice su una macchina XP Pro, il numero di copie passa come dovrebbe all'oggetto segnalante.Numero di copie che non passano mai dalla finestra di dialogo di stampa, sempre 1
Finora ho eseguito i test utilizzando sia il controllo comune di dialogo e vbprndlg.dll
ad alzare le finestre di dialogo di stampa sia su un Vista e un computer 7, e ogni volta che il numero di copie è sempre segnalato per essere uno, non importa se di tipo I il numero nella casella o utilizzare i pulsanti di attivazione/disattivazione della freccia per aumentare il numero di copie. Altre proprietà, ad esempio quale stampante è selezionata e i numeri da e verso la pagina sono riportati correttamente.
Quando si codifica il numero di copie sull'oggetto Crystal Report (mostrato di seguito), viene stampato il numero di copie corretto, pertanto questo sembra più un problema con il controllo della finestra di dialogo anziché l'oggetto Report Crystal.
Ecco un frammento di codice che sto utilizzando:
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
io non riesco a trovare tutte le informazioni sui problemi noti di compatibilità tra alzando le finestre di dialogo di stampa in VB6 e Windows Vista/7. C'è qualcos'altro che posso provare con i controlli di dialogo?
Ha funzionato per me. Testato su Win 7 32 bit, vincere Xp non ha bisogno di questo flag: D: D: D –