Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [VB6] stampa etichette

  1. #1

    [VB6] stampa etichette

    Ciao a tutti... un ennesimo problema...
    Ho creato un form della dimensione delle etichette adesive (quelle per stampanti ad aghi). Con il
    codice:
    Etichetta.PrintForm
    mando in stampa e devo dire che riesco a farlo benino, unico problema che finito di stampare il rullo con le etichette va avanti di molte etichette (quelle che stanno in un A4 mi dice il cliente).
    La sua richiesta è di stamparne una si ed una no... sapete come si fa?

  2. #2
    uppo...

  3. #3
    Non è chiarissimo quello che dici... Il fatto che il rullo faccia avanzare la carta finita la stampa è normale perchè con l'oggetto printer, pur essendo prevista tra le proprietà, non puoi variare le dimensioni della pagina in quanto una volta in stampa vengono considerate solo quelle impostate col driver della stampante. Non è normale il fatto che avanzi di un A4, quelle ad aghi hanno i trascinamenti e ragionano in pollici, forse e' 12". Sicuro che sia ad aghi?
    Comunque...
    O trovi un formato di pagina il cui valore verticale sia multiplo del passo che c'è tra un'etichetta e l'altra, o devi interagire con la stampante inviandole i comandi via parallela/TcpIp che trovi nel manuale del driver (in questo modo puoi far fare alla stampante tutto ciò che vuoi, ma è veramente lungo come programma).
    Di che misura è l'etichetta? Il passo qual'è?

  4. #4
    in effetti hai ragione... ho posto la domanda al mio cliente (la stampante ce l'ha lui) ed avanza di 34cm (tutto il foglio delle etichette). La stampante è cmq ad aghi.
    Il salto fra l'inizio di 2 etichette è di 7,7. Il foglio completo che ne ha 8 è alto circa 34cm.
    L'etichetta è un ~3.8x8.2cm
    Grazie per l'interessamento.

  5. #5
    Io non ho ancora capito bene intanto provo ad aiutarti
    ho avuto più o meno lo stesso tuo problema.
    Dunque mettiamo che sul foglio ci stiano 8 stampe di etichette
    tu devi intercettare a che stampa si trova il cliente (es. se si trova alla posizione 4 lo fai stampare nella 5 e via discorrendo)
    senza inseririre mai il Printer.EndDoc
    Poi fai decidere all'utente quando far stampare e far tirare fuori il foglio alla stampante mettendogli un CommandButton con la sola istruzione "Printer.EndDoc"
    Ciao
    I'll see you on the dark side of the moon

  6. #6
    Ok, anche se ho dubbi sulle misure che il cliente ti ha fornito.
    Comunque la soluzione c'è. Non puoi utilizzare PrintForm, perchè questo invia direttamente i dati alla stampante senza attendere e non avresti modo di stampare altri form sullo stesso modulo. Puoi però costruirti l'immagine con l'oggetto printer in 2 modi:
    1) Costruisci l'etichetta da zero (te lo consiglio)
    2) Ti memorizzi il form + volte e lo mandi in stampa.
    Non posso dirti come fare il caso n1, perchè non so quello che c'è nel form, ma ti assicuro che è molto + facile ed elegante come metodo.
    Per il caso 2 fai così...
    In un modulo scrivi questo:
    codice:
     Public Declare Function BitBlt Lib "gdi32" _
     (ByVal hDCDest as Long, ByVal XDest as Long, _
     ByVal YDest as Long, ByVal nWidth as Long, _
     ByVal nHeight as Long, ByVal hDCSrc as Long, _
     ByVal XSrc as Long, ByVal YSrc as Long, _
     ByVal dwRop as Long) As Long
    
     Public Declare Function GetDesktopWindow Lib "user32" () As Long
     Public Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
     Public Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
    Nel form inserisci una PictureBox facendo in modo che non si veda (o la rendi non visibile o la sposti in modo che esca dalle dimensioni del form) ed inserisci questo codice (nel codice del form da stampare) che ti permette di riempire la PictureBox con l'immagine del form.
    codice:
    Private Sub PrintXForm()
        Dim r As Long
        Dim hWndForm As Long
        Dim hDCForm As Long
    
        Dim LeftForm As Long
        Dim TopForm As Long
        Dim WidthForm As Long
        Dim HeightForm As Long
       
        LeftForm = 0
        TopForm = 0
        WidthForm = Me.ScaleX(Me.Width, vbTwips, vbPixels)
        HeightForm = Me.ScaleY(Me.Height, vbTwips, vbPixels)
       
        hWndForm = Me.hWnd
        hDCForm = GetWindowDC(hWndForm)
       
        r = BitBlt(Picture1.hdc, 0, 0, WidthForm, HeightForm, _
                   hDCForm, LeftForm, TopForm, vbSrcCopy)
        r = ReleaseDC(hWndForm, hDCForm)
    End Sub
    In questo momento la PictureBox contiene l'immagine di un form, ovvero di un'etichetta. Non so se le etichette sono sempre uguali, o se c'è una variabile nel form. Se c'è una variabile devi far ripetere la Sub PrintXForm + volte. Per semplificare poniamo che l'etichetta sia sempre uguale e che sia posizionata a 12 mm dal bordo sinistro e la prima a 4 mm dall'alto.
    Ora posiziona l'etichetta sul modulo
    codice:
    Private Sub CreateSheet
        Dim Counter as Long
        PrintXForm()
        Printer.ScaleMode = 6 'mm
        For Counter = 1 to MaxCounter
            PrintLabel Cunter
        Next
        Printer.EndDoc
    End Sub
    
    Private Sub PrintLabel(IndexLabel as Long)
        OffsetY = 4 'public
        Printer.CurrentX = 12
        Printer.CurrentY = (IndexLabel mod 8 - 1) * 77 + OffsetY
        Printer.PaintPicture (Picture1.Picture, Printer.CurrentX, Printer.CurrentY)
        If IndexLabel mod 8 = 0 Then
            Printer.NewPage()
        EndIf
    End Sub
    Se invece il form è variabile sposta PrintXForm nel ciclo for
    codice:
    Private Sub CreateSheet
        Dim Counter as Long
        Printer.ScaleMode = 6 'mm
        For Counter = 1 to MaxCounter
            ModificaForm()
            PrintXForm()
            PrintLabel Cunter
        Next
        Printer.EndDoc
    End Sub
    Ribadisco che il primo metodo è meglio!

  7. #7
    Non mi chiaro quello che mi avete spiegato... Possibile che non ci sia un modo per non far avanzare il rullo? Come si impostano le dimensioni del foglio di stampa?

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.