2010-08-04 11 views
6

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?

risposta

8

La risposta è saltata fuori non appena ho presentato questa domanda.

Se si modifica la proprietà del controllo VBPrnDlg per includere il flag vbprndlglib.cdlPDUseDevModeCopies, il numero di copie viene ripristinato.

Speriamo che questo aiuti qualcuno bloccato in un problema simile!

+1

Ha funzionato per me. Testato su Win 7 32 bit, vincere Xp non ha bisogno di questo flag: D: D: D –

Problemi correlati