Newsgroup: it.comp.lang.visual-basic
Titolo: Oggetto Printer

Salve a tutti,
sto imparando ad usare VB6 dopo anni di Qb45 e sono molto in difficoltà con
i concetti astratti di Visual per cui chiedo a qualcuno più esperto di me di
darmi un'aiuto.
Ho riportato qui sotto la routine completa per la stampa dei dati di una
ListBox. Mi appare la CommonDialog, dò l'OK per la stampa, il form di
dialogo scompare ma fino a che non esco dal programma i dati non vengono
mandati in stampa.
Dove sbaglio ?
Private Sub mnuFileStampa_Click()
    'stampa brutale del file su printer
    Dim iNumeroPaginaCorrente, iCounterRecord, iNumRiga As Integer, sTextRecord
As String
    Dim x1, y1, x2, y2 As Integer
    Dim sType, sProg, sEast, sNort, sNote, sVerso, sWord As String
    On Error Resume Next
    Printer.Scale (0, 0)-(210, 297)
 
    With dlgCommonDialogPrinter
        .DialogTitle = "Stampa"
        .CancelError = True
        .Flags = cdlPDReturnDC + cdlPDNoPageNums
        'If ActiveForm.rtfText.SelLength = 0 Then
        .Flags = .Flags + cdlPDAllPages
        'Else
        ' .Flags = .Flags + cdlPDSelection
        'End If
        .ShowPrinter
 
        If Err <> MSComDlg.cdlCancel Then
            iCounterRecord = 0
            iNumeroPaginaCorrente = 0: iNumRiga = 0
            Printer.FontName = ListBox1.Font
            If sNomeFileSave = "" Then
                sFile = sNomeFileOpen
                Else: sFile = sNomeFileOpen
            End If
            Do
                If Not iNumeroPaginaCorrente = Printer.Page Then
                    Printer.Print "File :"; sFile,: Printer.Print " - Page ";
Format(Printer.Page, "000"); " -"
                    iNumeroPaginaCorrente = Printer.Page
                    Printer.Print "": iNumRiga = iNumRiga + 1
                    Printer.Print " Type Station Easting Northing Template Verso Annotazioni"
                    x1 = 0: y1 = CurrentY + 11: x2 = 210: y2 = y1
                    Printer.Line (x1, y1)-(x2, y2)
                    Printer.Print "": iNumRiga = iNumRiga + 1
                End If
                iCounterRecord = iCounterRecord + 1
                sTextRecord = ListBox1.List(iCounterRecord)
                sWord = "11..": sProg = DecodBlock(sTextRecord, sWord)
                sWord = "71..": sType = DecodBlock(sTextRecord, sWord)
                sWord = "72..": sVerso = DecodBlock(sTextRecord, sWord)
                                If Val(sVerso) >= 0 Then
                                   sVerso = "+"
                                   Else: sVerso = "-"
                                End If
                sWord = "73..": sNote = DecodBlock(sTextRecord, sWord)
                sWord = "81..": sEast = DecodBlock(sTextRecord, sWord)
                sWord = "82..": sNort = DecodBlock(sTextRecord, sWord)
                Printer.Print Left(sType & String(20, "."), 12);
                Printer.Print Space(10 - SegnaPosti(sProg)) & Format(Val(sProg), "0.0000");
                Printer.Print Space(10 - SegnaPosti(sEast)) & Format(Val(sEast), "0.0000");
                Printer.Print Space(10 - SegnaPosti(sNort)) & Format(Val(sNort), "0.0000");
                Printer.Print Space(4) & Left(sNote & String(20, " "), 16);
                If sType = "CURVE" Then
                    Printer.Print " " & sVerso & " ": iNumRiga = iNumRiga + 1
                    Else: Printer.Print "": iNumRiga = iNumRiga + 1
                End If
                Printer.Print "": iNumRiga = iNumRiga + 1
                If iNumRiga >= 66 Then iNumRiga = 0: Printer.NewPage
            Loop While Not iCounterRecord = ListBox1.ListCount - 1
            Printer.NewPage
        End If
    End With
 
End Sub
--------------------------------
Inviato via 
http://usenet.libero.it


hai semplicemente dimenticato un'istruzione
subito prima dell' End Sub mettici un printer.enddoc e vedrai che stampa
--
Ciao
Alfredo
Vb6+Sp5+Win2k


 Dove sbaglio ?
alla fine del codice inserisci printer.enddoc e vedrai che funziona.
ciao
_______________________________________
{30 - Visual Studio.NET and VC++ development }
_______________________________________

Mi sono cresciute due orecchie tipo somaro,
comunque grazie. Ciao, Roberto


 ha scritto nel messaggio
news:81Z75Z119Z189Y1...@usenet.libero.it...


 ha scritto nel messaggio
news:81Z75Z119Z189Y1...@usenet.libero.it...



Arisalve,
sempre a proposito della stessa Sub, quando premo il tasto Cancel il VB mi
segnala errore. Perchè ????


 Ciao, Roberto
perché tu fai
On error resume next (che io abolisco a priori), cmq prova a fare
On error goto Errore
---
---
---
exit sub
Errore:
    If Err.Number = 32755 Then
        MsgBox "Stampa annullata dall'utente", vbInformation
    Else
        MsgBox Err.Description, vbCritical
    End If
end sub
in questo modo intercetti il tasto di annulla stampa, che poi sarebbe il
codice di errore 32755
--
Ciao
Alfredo
Vb6+Sp5+Win2k

Ho provato ma VB mi si blocca cmq. su
           .ShowPrinter
evidenziato in giallo e con un msb che mi dice:
  "è stato scelto annulla"
Ciao, Roberto

--------------------------------
Inviato via 
http://usenet.libero.it


ma hai sotituito quel "On error resume next" con "On error goto Errore"?
riposta tutta la sub e vediamo che succede
--
Ciao
Alfredo

Dear Alfredo,
rimando di seguito tutta la sub controllo;
se possibile qualche info in + su
  """.Flags = cdlPDReturnDC + cdlPDNoPageNums"""
quello che trovo su MSDN Library non lo trovo suff.
La sub l'ho prelevata dal Wizard autocomposizione di VB
e poi la provo vedendo quel che succede. Insomma faccio un pò di navigazione
a vista andando ad eliminare gli errori passo passo.
Ho imparato sempre così e trovo che il NG sia un'opportunità impagabile.
Ciao, Roberto
Private Sub mnuFileStampa_Click()
    'stampa brutale del file su printer
    Dim iNumeroPaginaCorrente, iCounterRecord, iNumRiga As Integer, sTextRecord
As String
    Dim x1, y1, x2, y2 As Integer
    Dim sType, sTipo, sProg, sEast, sNort, sNote, sVerso, sWord As String
    On Error GoTo Errore
 
    With dlgCommonDialogPrinter
        .DialogTitle = "Stampa"
        .CancelError = True
        .Flags = cdlPDReturnDC + cdlPDNoPageNums
 
        'If ActiveForm.rtfText.SelLength = 0 Then
        .Flags = .Flags + cdlPDAllPages
        'Else
        ' .Flags = .Flags + cdlPDSelection
        'End If
        .ShowPrinter
        If Err <> MSComDlg.cdlCancel Then
            Printer.Scale (0, 0)-(210, 297)
            iCounterRecord = 0
            iNumeroPaginaCorrente = 0: iNumRiga = 0
            Printer.FontName = ListBox1.Font
            Printer.FontSize = 8
            Printer.FontItalic = True
            Printer.FontBold = False
            If sNomeFileSave = "" Then
                sFile = sNomeFileOpen
                Else: sFile = sNomeFileOpen
            End If
            Do
                If Not iNumeroPaginaCorrente = Printer.Page Then
                    Printer.Print "": iNumRiga = iNumRiga + 1
                    Printer.Print "File :"; sFile;
                    Printer.CurrentX = 170: Printer.Print " - Page "; Format(Printer.Page,
"000"); " -"
                    iNumeroPaginaCorrente = Printer.Page
                    Printer.Print "": iNumRiga = iNumRiga + 1
                    Printer.CurrentX = 10
                    Printer.Print " Type Station Easting Northing Template Verso Annotazioni"
                    x1 = 0: y1 = Printer.CurrentY + 1: x2 = 210: y2 = y1
                    Printer.Line (x1, y1)-(x2, y2)
                    Printer.Print "": iNumRiga = iNumRiga + 1
                End If
                iCounterRecord = iCounterRecord + 1
                sTextRecord = ListBox1.List(iCounterRecord)
                sWord = "11..": sProg = DecodBlock(sTextRecord, sWord)
                sWord = "71..": sType = DecodBlock(sTextRecord, sWord)
                                sTipo = Traduci(sType)
                sWord = "72..": sVerso = DecodBlock(sTextRecord, sWord)
                                If Val(sVerso) >= 0 Then
                                   sVerso = "+"
                                   Else: sVerso = "-"
                                End If
                sWord = "73..": sNote = DecodBlock(sTextRecord, sWord)
                sWord = "81..": sEast = DecodBlock(sTextRecord, sWord)
                sWord = "82..": sNort = DecodBlock(sTextRecord, sWord)
                Printer.CurrentX = 5
                Printer.Print Format(iCounterRecord, "00-");
                Printer.Print Left(sTipo & String(20, " "), 11);
                Printer.Print Space(10 - SegnaPosti(sProg)) & Format(Val(sProg), "0.0000");
                Printer.Print Space(10 - SegnaPosti(sEast)) & Format(Val(sEast), "0.0000");
                Printer.Print Space(10 - SegnaPosti(sNort)) & Format(Val(sNort), "0.0000");
                Printer.Print Space(4) & Left(sNote & String(20, " "), 16);
                If sType = "CURVE" Then
                    Printer.FontSize = 8
                    Printer.FontBold = True
                    Printer.Print " " & sVerso & " ": iNumRiga = iNumRiga + 1
                    Printer.FontSize = 8
                    Printer.FontBold = False
                    Else: Printer.Print "": iNumRiga = iNumRiga + 1
                End If
                If iNumRiga > 70 Then
                    x1 = 0: y1 = Printer.CurrentY + 5: x2 = 210: y2 = y1
 
                    Printer.Line (x1, y1)-(x2, y2)
                    x1 = 0: y1 = 280: x2 = 210: y2 = y1
                    Printer.Line (x1, y1)-(x2, y2)
                    x1 = 0: y1 = 285: x2 = 210: y2 = y1
                    Printer.Line (x1, y1)-(x2, y2)
                    iNumRiga = 0: Printer.NewPage
                End If
                Printer.Print "": iNumRiga = iNumRiga + 1
            Loop While Not iCounterRecord = ListBox1.ListCount - 1
            x1 = 0: y1 = Printer.CurrentY + 1: x2 = 210: y2 = y1
            Printer.Line (x1, y1)-(x2, y2)
            Printer.NewPage
            Else: Exit Sub
        End If
    End With
    Printer.EndDoc
    Exit Sub
Errore:
    If Err.Number = 32755 Then
        MsgBox "Stampa annullata dall'utente", vbInformation
    Else
        MsgBox Err.Description, vbCritical
    End If
 
 
End Sub
