Newsgroup: it.comp.lang.visual-basic
Titolo: Stampare in modatità carattere

E' possibile stampare da VB direttamente su una porta in modalità carattere?
(l'oggetto Printer si appoggia al driver di windows e produce una stampa di
tipo "grafico"; io ho bisogno di stampare su delle stampanti ad aghi in
manierà molto rapida - come avviene dal prompt del dos)
se qualcuno sa aiutarmi mi aiuti, please
Princi

>E' possibile stampare da VB direttamente su una porta in modalitą
carattere?
Ipotizzo,
hai provato con
Open "LPT1:" for output as #1
write#1, data
close #1
Sig

 wrote in message
8l1ang$61n$1...@nslave2.tin.it...





all'inizio e alla fine di alcune righe?
è la Write che mette le virgolette... usa invece Print# per avere testo non
formattato. Puoi anche inviare i codici di controllo con la funzione chr$(),
es. print #1, chr$(12) & chr$(...), le stampanti di solito supportano le
sequenza ESC (chr$(27) se non sbaglio) per il controllo (es. se vuoi
stampare in grassetto, mandi ESC + un codice, se vuoi tornare al normale
mandi ESC + un altro codice). Guarda il manuale della stampante.
Ciao
Sig

 manierà molto rapida - come avviene dal prompt del dos)
Le seguenti API ti permettono ti interagire direttamente con lo spool di
stampa. Spesso velocizzando la gestione della stampa, soprattutti per
quanto rigurada le righe vuote.
'Funzioni di gestione stampante a basso livello
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter
As Long) As Long
Private Declare Function EndDocPrinter Lib "winspool.drv" (ByVal
hPrinter As Long) As Long
Private Declare Function EndPagePrinter Lib "winspool.drv" (ByVal
hPrinter As Long) As Long
Private Declare Function OpenPrinter Lib "winspool.drv" Alias
"OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, ByVal
pDefault As Long) As Long
Private Declare Function StartDocPrinter Lib "winspool.drv" Alias
"StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long,
pInfoDocPrint As InfoDocPrint) As Long
Private Declare Function StartPagePrinter Lib "winspool.drv" (ByVal
hPrinter As Long) As Long
Private Declare Function WritePrinter Lib "winspool.drv" (ByVal hPrinter
As Long, pBuf As Any, ByVal cdBuf As Long, pcWritten As Long) As Long
Private Const WM_WININICHANGE = &H1A        'File WIN.INI modificato
Private Const HWND_BROADCAST = &HFFFF
Private Type InfoDocPrint           'Informazioni documento in stampa
    pDocName As String              'Nome stampa
    pOutputFile As String
    pDatatype As String
End Type
Private Function HandleOfPrinter(ByVal PrinterName As String, byval
NameProcPrinter as string) As Long
'*****************************************************************************************************
'Connessione e apertura della stampante, ricavo l'handle di collegamento
'PrinterName = nome stampante
'NameProcPrinter = Nome che verrà dato al processo di stampa
Dim lReturn As Long                 'Risultato collegamento
Dim HldPrinter As Long              'Handle della stampante
Dim IdPrinterJob As Long            'Identificatore del processo di
stampa
Dim DocPrint As InfoDocPrint        'Dati del docuemnto di stampa
    lReturn = OpenPrinter(PrinterName, HldPrinter, 0)     'Ricavo
l'Handle della stamoante
 
    If lReturn = 0 Then                     'Stampante non trovata
        HandleOfPrinter = 0
    Else                                    'Collegamento alla stampante
corretta
 
        'Dati processo di stampa
        DocPrint.pDocName = NameProcPrinter           'Nome del processo
di stampa
        DocPrint.pOutputFile = vbNullString
        DocPrint.pDatatype = vbNullString
 
        IdPrinterJob = StartDocPrinter(HldPrinter, 1, DocPrint)   'Set
spooler documento
        If IdPrinterJob = 0 Then        'Stampa non disponibile
            HandleOfPrinter = 0
        Else                            'Inizializzazione stampa
corretta
            lReturn = StartPagePrinter(HldPrinter)           'Inizio
pagine
            If lReturn = 0 Then         'Impossibile inizializzare la
pagina di stampa
                HandleOfPrinter = 0
            Else
                HandleOfPrinter = HldPrinter        'Handle stampante
            End If
        End If
 
    End If
 
End Function
Private Function PrinterLine(ByVal LineToPrint As String, HldPrinter As
Long) As Long
'************************************************************************************
'Inserisce nello spooler della stampante, indictata da HldPrinter, la
riga
'da stampare (LineToPrinter)
'Restituisce il risultato della stampa
Dim lpcWritten As Long          'Byte scritti sulla stampante
 
    PrinterLine = WritePrinter(HldPrinter, ByVal LineToPrint,
Len(LineToPrint), lpcWritten)
End Function
Private Function DisconnectPrinter(ByVal HldPtinter As Long) As Long
'****************************************************************
'Termine collegamento alla stampante
'1 : chiusura corretta
'0 : errori in chiusura
Dim lReturn As Long         'Risultato operazioni chiusura documento e
stampante
 
    DisconnectPrinter = 1
 
    lReturn = EndPagePrinter(HldPtinter)        'Fine pagina di stampa
    If lReturn = 0 Then                         'Errore chiusura pagine
        DisconnectPrinter = 0
    End If
 
    lReturn = EndDocPrinter(HldPtinter)         'Fine documento in
stampa
    If lReturn = 0 Then                         'Errore
        DisconnectPrinter = 0
    End If
 
    lReturn = ClosePrinter(HldPtinter)          'Termine connesione alla
stampante
    If lReturn = 0 Then                         'Errore
        DisconnectPrinter = 0
    End If
 
End Function
che richiami in questo modo:
HldPrinter = HandleOfPrinter(PrinterName, "Stampa Deleghe")    
'Inizializzazione stampa
 
    If HldPrinter = 0 Then     'Stampante non disponibile
        MsgBox "Impossibile stampare su " & Printer.DeviceName & "." &
vbCrLf & "Stampante non trovata", 		vbCritical + vbOKOnly
    Else
 
        do while (passi tutte le righe da stampare)     
            PrinterLine Stringdastampare, HldPrinter  'Stampa della riga
        loop 
        DisconnectPrinter HldPrinter          'Chiusura collegamneto
alla stampante
 
    End If
 
  :-) Hd (-:
-^- Verso l'infinito e oltre -^-

 wrote in message
8l1hta$l2r$1...@nslave1.tin.it...
