Newsgroup: it.comp.lang.visual-basic
Titolo: Stampa su generica (lungo)

Ciao a tutti.
Ho già postato qualche giorno fa riguardo a un problema che ho riscontrato
con il driver di stampa "generico solo testo" su win2000.
Il mio problema è questo: il mio programma deve stampare un file di testo,
senza inframmezzare nei dati codici di controllo e simili. Praticamente il
mio programma è così:
puntamento alla stampante di testo generica locale
open del file
ciclo fino a fine-file
    lettura da file
    printer.print stringa
fine ciclo
chiusura file
printer.enddoc
Il programma funziona perfettamente su win9x. La stampa esce
correttamente, senza form feed ed altro (devo stampare etichette su una
stampante ad aghi con trattore per moduli continui e devo usare per forza
il carattere standard della stampante, quindi niente font o impostazioni
della pagina).
Se porto il programma su win2000 dopo qualche decina di linee mi escono
linee sovrapposte e form feed. Dopo controlli incrociati e verifiche ho
accertato che il problema è solo del driver win2000. Sulla knowledgebase
microsoft ho provato a cercare, ma secondo loro
(
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q182889
) il
driver 2000 non manda caratteri di controllo, cosa che invece fa. 
Ho provato a cambiare processore di stampa, modalità di stampa (raw e emf,
il text non riesce a salvarlo) ma non cambia niente.
Se qualcuno di voi ha una stampante ad aghi potrebbe provare a stampare
(Il codice lo posto in reply a questo post) un file di testo puro
contenente 150-200 righe? così, per capire se è un problema
generalizzato... 
Driver che colloquiano direttamente con la lpt1 non vanno bene, perchè il
buffer stampante è troppo piccolo e rischio che si saturi senza che il
programma se ne accorga. Esiste un modo per usarlo riuscendo a capire se
la stampante sta inviando caratteri di controllo tipo "buffer pieno" ?
In alternativa stavo pensando di costruirmi un driver di stampa "raw",
qualcuno sa dove reperire info? 
grazie per l'attenzione
-------------------------------------------------------
Messaggio inviato da 
http://www.sandlab.org/newsgroup/
Accesso gratuito via web ai Newsgroup

Option Explicit
public const strNomeStampante="Generica" ' cambiare il nome stampante
Public Sub Main()
    Dim i As Long
    Dim fileInp As Long
    Dim strInp As String
 
    If CercaStampante(strNomeStampante) = False Then
        MsgBox "Stampante non trovata."
        End
    End If
 
    fileInp = FreeFile
    Open "c:\input1.dat" For Input As fileInp
 
    Dim intLng As Long
    While Not EOF(fileInp)
        Line Input #fileInp, strInp
        Printer.Print strInp
    Wend
 
    Close fileInp
    Printer.EndDoc
End Sub
' cerca se c'è una stampante adatta, e se c'è la imposta come predefinita
Public Function CercaStampante(strNomeStampante As String) As Boolean
    Dim BlStampanteTrovata As Boolean
    Dim Prn1 As Printer
    BlStampanteTrovata = False
 
    For Each Prn1 In Printers
        If Prn1.DeviceName = strNomeStampante Then
            Set Printer = Prn1
            BlStampanteTrovata = True
        End If
    Next
    CercaStampante = BlStampanteTrovata
End Function
e qui c'è il file di input
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
0A
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
A0
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
0A
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
