Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103

    [VB6] Oggetto MSComm - Problema con stampante

    Ciao a tutti,
    ho un problema con una stampante di etichette (Intermec PC43d).
    Praticamente ogni tanto mi stampa correttamente l'etichetta, altre volte (anche subito dopo) me ne stampa mezza o una piccola parte. Mi hanno detto che forse questo è dovuto al fatto che si chiude la porta prima che tutti i dati siano stati trasmessi al buffer. Però ho notato che anche se elimino l'istruzione di chiusura della porta (MSComm1.PortOpen = False) rimane lo stesso problema.
    Qualcuno può aiutarmi?
    C'è il modo di controllare che tutti i dati siano stati trasmessi prima di chiudere la porta?
    Grazie!

    Codice:
    codice:
    Private Sub cmdStampa_Click()
    
    If cboLotto.ListIndex = -1 Then
    MsgBox "Nessun codice lotto selezionato!"
    'Else
    'MsgBox "L'utente ha selezionato " & lstLotto.Text & ""
    End If
    
    If cboCertificato.ListIndex = -1 Then
    MsgBox "Nessun certificato selezionato!"
    'Else
    'MsgBox "L'utente ha selezionato " & lstCertificato.Text & ""
    End If
    
    
            Dim strBuff As String
            Dim PercorsoFile As String
            
            PercorsoFile = "C:\Users\Elena\Desktop\Output.prn"
            'Leggo tutto il file in modalità binaria (la piu' veloce) e salvo il contenuto in una variabile stringa strBuff
            Open PercorsoFile For Binary As #1
                strBuff = Space(LOF(1))
                Get #1, , strBuff
            Close #1
                
            'eseguo il replace delle parole che voglio modificare
            strBuff = Replace(strBuff, "LOTTO, CERTIFICATO", "" & cboLotto.Text & ", " & cboCertificato.Text & "")
            strBuff = Replace(strBuff, "Testo lotto", "Lotto: " & cboLotto.Text & "")
            strBuff = Replace(strBuff, "Testo certificato", "Certificato: " & cboCertificato.Text & "")
    
            'sovrascrivo il vecchio file
            Open "C:\Users\Elena\Desktop\Output1.prn" For Binary As #1
                Put #1, , strBuff
            Close #1
            
    
    MSComm1.PortOpen = True
    MSComm1.Output = strBuff
    MSComm1.PortOpen = False
    
    End Sub

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' difficile fare una "diagnosi" ma il problema potrebbe essere legato alla lunghezza di strBuff. Quanto è lunga?

    Succede la stessa cosa se non esegui le Replace?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103
    Sì...succede la stessa cosa anche se non eseguo la Replace.
    strBuff è 890 caratteri...
    Conosci il modo di controllare che siano stati trasmessi tutti i dati nel buffer prima di chiudere la porta? Devo utilizzare la proprietà OutBufferCount?
    Grazie mille!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prima di chiudere attendi in un ciclo che quella proprietà scenda fino a 0

    Inoltre, nella documentazione della proprietà Output puoi leggere

    "To send binary data, you must pass a Variant which contains a byte array to the Output property"
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103
    Ecco come ho modificato il codice:

    codice:
    Dim x As Integer
    
    MSComm1.PortOpen = True
    MSComm1.Output = strBuff
    
    Do
    x = MSComm1.OutBufferCount
    If x = 0 Then MSComm1.PortOpen = False
    Loop Until x = 0

    Ma ho sempre lo stesso problema...
    Il mio codice è corretto, vero?
    Quindi non dovrebbe essere un problema con la trasmissione dei dati nel buffer...giusto?
    Grazie mille ancora!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' meglio così

    codice:
    MSComm1.PortOpen = True
    MSComm1.Output = strBuff
    
    Do
      DoEvents
    Loop Until MSComm1.OutBufferCount = 0
    
    MSComm1.PortOpen = False
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103
    Ho anche inserito una msgbox per controllare che OutBufferCount sia effettivamente 0...

    codice:
    Dim x As Integer
    
    MSComm1.PortOpen = True
    MSComm1.Output = strBuff
    
    Do
    x = MSComm1.OutBufferCount
    MsgBox x
    If x = 0 Then MSComm1.PortOpen = False
    Loop Until x = 0
    E in effetti mi scrive che x = 0!!

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Hai letto la mia risposta?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103
    No scusa!! Non avevo visto la tua risposta!
    Grazie mille!

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103
    Non funziona nemmeno con il tuo codice!
    Secondo me è la stampante che svalvola!!
    Grazie ancora!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.