Newsgroup: it.comp.lang.visual-basic
Titolo: Problemi con prnprv

Salve a tutti.
Da tempo uso senza alcun problema la il codice prnprv di GBC per
eseguire delle stampe con dei semplici programmini che ho realizzato.
Ultimamente mi sono dovuto scontrare con la necessità di dover mandare
una stampa non più sulla stampante predefinita ma su un'altra
installata sul computer; E tutto deve avvenire in automatico. Quando
cioè si lanciano alcune stampe deve utilizzare la stampante
predefinita ma con altre stampe deve utilizzare una stampante che è
stata precedentemente scelta. Salvo il nome della stampante su un file
di testo.
Per fare questo imposto la stampante con il seguente codice:
'popola la combo con tutte le stampanti di sistema
Dim X As Printer
For Each X In Printers
Combo1.AddItem X.DeviceName
Next
'legge dal file, se esiste, quale è stata impostata
If FileExist(RisorsaRete & ":\ACS\Mago\PrnSing.mgo") = True Then
Open RisorsaRete & ":\ACS\Mago\PrnSing.mgo" For Input Shared As #1
Line Input #1, riga
Close #1
Combo1.Text = riga
For Each X In Printers
If X.DeviceName = Combo1.Text Then
Set Printer = X
Exit For
End If
Next
Else
Combo1.Text = ""
End If
Per ripristinare la stampante predefinita uso:
Dim X As Printer
For Each X In Printers
If X.DeviceName = StampantePredefinita Then
Set Printer = X
Exit For
End If
Next
dove la variabile StampantePredefinita è una variabile pubblica che
carico alla partenza e che contiene il nome della stampante predefinita
di Windows.
Il problema nasce dopo che ho riportato Printer sulla stampante
predefinita.
Il metodo printer impazzisce....
Se voglio stampare due righe mi manda in stampa due fogli bianchi.
Sbaglio qualcosa nell'impostare  le stampanti?

 Per fare questo imposto la stampante con il seguente codice:
[snip]
PrnPrv stampa sulla stampante 'preimpostata'.
Io faccio così:
prima di iniziare a stampare inserisco questo codice:
    ' inizializza stampante
    A = IniRead("StampaModuloA", "Stampante")
    prnINDEX = prnFIND(A)
    If prnINDEX = -1 Then
        MsgBox "! La stampante '" + A + "' non è accessibile o non esiste"
    else
        prnACTIVATE prnINDEX
        ' segue routine di stampa
    End If
che usa queste function:
Function prnFIND(prnNOME) As Integer
    prnFIND = -1
    Dim l As Integer, A As String
    For l = 0 To Printers.Count - 1
        A = Printers(l).DeviceName
        If UCase(prnNOME) = UCase(A) Then
            prnFIND = l
            Exit For
        End If
    Next l
End Function
Sub prnACTIVATE(prnNDX As Integer)
    If prnNDX >= 0 Then
        Set Printer = Printers(prnNDX)
        rMAIN.eleSTAMPANTI.ListIndex = prnNDX
    End If
End Sub
bau bau
-> GbC|
www.gbcweb.com

pastando ho eliminato qualche riga...
spiego meLLio :)
A = IniRead("StampaModuloA", "Stampante")
A è il nome della stampante (dim A as String)
IniRead è una funzione che legge un file ini, evidentemente
Function prnFIND(prnNOME) As Integer è in realtà
Function prnFIND(prnNOME as String) As Integer
rMAIN.eleSTAMPANTI.ListIndex = prnNDX
rMAIN.eleSTAMPANTI è una listbox con l'elenco dei nomi delle stampante
presenti nel sistema che inizializzo subito prima di iniziare la routine di
stampa. Mi serve per ripristinare la stampante di default del sistema
(quella di default PRIMA di lanciare la mia stampa).
Lo so che l'Exit For fa 'caghér' (sento Lupo urlarmi contro anche da lassù)
ma tanto è...
Si capisce cosa fa no? Sono solo una dozzina di righe di codice.
Ciao
-> GbC|
www.gbcweb.com

Che piacere.... l'autore in persona !
Adesso mi esalto.
Ho visto che tu fai dei controlli per vedere se la stampante è
connessa e, se non sbaglio leggi da dei file .ini che ti sei creato.
Per il momento a me non interessano questi controlli ma però vedo che
l'attivazione della stampante la fai come me solo che io passo il nome
(devicename) e tu passi l'index.
Non dovrebbe cambiare più di tanto... o sbaglio?
Ho fatto un'ulteriore prova.
Dopo aver cambiato la stampante una volta e reimpostata quella che è
la predefinita ho provato a stampare con un semplice comando
printer.print "Ciao"
printer.enddoc
e questo si stampa correttamente.
Il problema mi nasce quando uso la tua prnprv dopo aver fatto una
stampa con una stampante diversa.
Non capisco proprio dove sta il problema.
Ho passato riga per riga fermando il codice per tutto il file che
prnprv crea ma mi sembra tutto a posto, ma quando spedisco il tutto
alla stampante (arriva cioè al #endpage) la stampante mi butta fuori
tutte pagine bianche (una per ogni riga !!!)
Ti è mai capitato?

 Ti è mai capitato?
Il fatto che io legga da un file INI il nome della stampante da utilizzare è
perché memorizzo su quale stampante stampare quel modulo; ma è una stupidata
legata a quella specifica applicazione.
Quindi:
A) leggo su quale stampante stampare
B) vedo se quella stampante esiste
C) se si, la imposto come predefinita
D) avvio la stampa (o l'anteprima), quindi:
    tempINIT
    ...
    ...
    ...
    ...
    tempEndPRINT
E) ripristino com predefinita la stampante che lo era prima di pastrocchiare
(C)
Il 'Set Printer = Printers(prnNDX)' imposta come stampante di default la
stampante di ordine prnNDX dell'insieme Printers. L'indice della stampante
da attivare viene ricavato dalla prnFIND, che passandogli il nome della
stampante che si vuole usare riporta l'indice della stampante corrispondente
e -1 se non esiste.
Suppongo che questa cosa si possa fare in un milione di modi alternativi.
Uso questo modo. Uno vale l'altro, a patto che si ottenga di avere come
stampante predefinita di uindos quella desiderata (su cui il programma VB
dovrà stampare).
Forse il tuo problema deriva dal fatto che non imposti come stampante di
default quella che vuoi. Non mi viene in mente nessuna altra possibilità.
Se imposti Printer=AAA l'istruzione printer.print stamperà su quella,
altrimenti no.
PrnPrv stampa SOLO sulla stampante preimpostata (come qualsiasi altra
applicazione VB).
Per cosa sta il VR di DavideVR?
Io sono a Verona, se ti interessa.
Bau
-> GbC|
www.gbcweb.com

Lo so che sei di Verona... sono per così dire " un tuo fan " da un
punto di vista VB.
Come mai hai tolto l'immagine in diretta del tuo ufficio dal sito?
Scherzi a parte, adesso sto modificando il mio codice per provare
esattamente come fai tu.
Deve funzionare!
Ti faccio sapere e grazie per la tua disponibilità.

Comunque sono anch'io di Verona (Borgo Roma).

AAARRGHHH.... non funziona!
Se hai un'altro pò di pazienza vorrei ricapitolare il tutto.
-Applicazione in VB per la gestione del magazzino
-La apro e stampo un elenco movimenti odierni con la stampante
predefinita --> OK
-Stampo un'etichetta con un'altra stampante --> OK
-Riprovo a stampare l'elenco movimenti e la stampante mi butta fuori
una valanga di fogli bianchi!
-Se invece a questo punto lancio una semplicissima stampa tipo
printer.Ciao seguita da printer.enddoc, questa si stampa.
Il passaggio da una stampante all'altra funziona bene quindi.
Non riesco a capire perchè prnprv mi fa arrabbiare.
Tu non hai mai incontrato un problema simile?

 ha scritto nel messaggio
news:1129554348.2...@z14g2000cwz.googlegroups.com...
AAARRGHHH.... non funziona!
Se hai un'altro pň di pazienza vorrei ricapitolare il tutto.
-Applicazione in VB per la gestione del magazzino
-La apro e stampo un elenco movimenti odierni con la stampante
predefinita --> OK
-Stampo un'etichetta con un'altra stampante --> OK
-Riprovo a stampare l'elenco movimenti e la stampante mi butta fuori
una valanga di fogli bianchi!
-Se invece a questo punto lancio una semplicissima stampa tipo
printer.Ciao seguita da printer.enddoc, questa si stampa.
Il passaggio da una stampante all'altra funziona bene quindi.
Non riesco a capire perchč prnprv mi fa arrabbiare.


Le stampanti sono tutte e due al laser nuove di zecca che non hanno
problemi di margini, almeno finora.
Confermo che se non cambio la stampante il report viene correttamente
stampato.
Cosa intendi con :"Hai chiuso le stampe?".... Dopo il comando
printer.enddoc la stampa potrebbe rimanere aperta?
E poi... se dopo aver cambiato la stampante provo a lanciare
printer.print "Ciao" seguito da printer.enddoc, questo funziona!
Non so più su quale specchio arrampicarmi!


eh il codice di GbC è "guru sensitive"....
!!!

 DavideVR wrote:
cmq il guru lo trovi spesso
in chat su
 
irc.azzurra.org
canale
#it_lang_vb
casomai invece di impestare il ng con lunghi post su piccole
modifiche....vai diretto alla fonte no???

"Wodka40°" ha scritto...

ah?
che č?
-> GbC|
www.gbcweb.com

 che č?
niente niente, voleva un autografo sulla cap_
occia :p ghghgh
Solo il fancleb ti mancava :p
-- 
-Gigio@work-
G2kSnipUrl : 
http://www.g2kweb.it/?3015
( il servizio accorcia link + Gigioso che conosciate ! )
---> No alla CONFISCA delle moto : 
http://www.maxkava.com/moto
 <---

 Solo il fancleb ti mancava :p
fanc##o club? :|
sono specializzato :P
devo riavviare gli spogliarelli serali sul grande gibello per recuperare un
po' di audience... mannaggia mannaggia
dai...
vediamoci all'osteria...
decidiamo un giorno...
chi c'č c'č e chi non c'č si fo##a...
no miTTing...
appuntamento dall'oste...
-> GbC|
www.gbcweb.com