Newsgroup: it.comp.lang.visual-basic
Titolo: oggetto printer... la stampa non è precisa.

Salve a tutti: stavolta sarò breve, spero che qualcuno possa aiutarmi....
Ho scritto il seguente codice:
Printer.ScaleLeft = 0
    Printer.ScaleTop = 0
    Printer.ScaleMode = 6
 
Printer.Font.Name
 = "courier new"
    Printer.Font.Size = 12
    'stampa intestatario fattura
    Printer.Font.Bold = True
    Printer.CurrentX = 113
    Printer.CurrentY = 49
    Printer.Print ("Spett.le" & txtNome.Text)
    Printer.CurrentX = 113
    Printer.CurrentY = 55
    Printer.Print (txtIndirizzo.Text)
ecc...
perchè il testo stampato mi risulta spostato in basso e a destra di 6
millimetri?
che altra proprietà devo impostare?
grazie mille a tutti

[*Paolo C.* = 
pc...@fastwebnet.it
 in
news:IEsTb.20371$
VS6....@tornado.fastwebnet.it
] ha scritto:

Temo nessuna, ma a me va benissimo così.
Hai tenuto conto dei _naturali_ margini superiore e laterale?
Quando si lavora con Printer, si deve considerare sempre e solo l'area di
stampa, non la dimensione del foglio.
Vedi, dopo averle assegnato correttamente il modulo e l'orientamento,
Printer.Scale<Height Width>
Tutto ciò che sta al di fuori non ti riguarda.

    Printer.ScaleMode = 6
E' meglio impostare lo scale mode prima di qualsiasi altro parametro
e poi suggerisco di usare le costanti con nome parlante perche', a
meno che uno non faccia altro dal mattino alla sera, ricordarsi che
6 e' vbMillimeters...
-- 
ciao, hal

è che in un altro programma, sempre con la stessa stampante, le stesse
istruzioni, non mi dava questi "problemi".
poi tra l'altro
"L'impostazione di ScaleMode su un numero maggiore di 0 attribuisce la nuova
unità di misura a ScaleHeight e ScaleWidth e imposta ScaleLeft e ScaleTop su
0. Inoltre, le impostazioni delle proprietà CurrentX e CurrentY cambiano per
riflettere le nuove coordinate del punto corrente. "
quindi posso anche eliminare Printer.ScaleLeft = 0 e Printer.ScaleTop = 0
:-)
Ho pensato a questa soluzione: dato che non posso sapere l'area stampabile
della printer di cui disporrà il cliente allora introduco un displacement
che il cliente misurerà in millimetri la prima volta che stampa e che
rimarrà memorizzato finchè non decide di cambiarlo... quindi tutte le
coordinate currentxX e currentY saranno impostate a x + displacement e y+
displacement...
che ne pensi?
hai una soluzione migliore (chissà perchè sono sicuro di sì? :-)
PS: grazie per la disponibilità!


e questo pure č vero... ho pensato "ora lo scrivo nel messaggio che 6 č
vbMillimeters e poi l'ho dimenticato :-P

o esiste il modo di conoscerla da codice ed - ovviamente - io non lo
conosco? :-)

...intendo l'area stampabile.... che avete pensato?

 PS: grazie per la disponibilità!
fin che dura...

 che altra proprietà devo impostare?
Da VB puro, temo niente. Probabilmente con le API puoi accedere
alle info fornite dal driver di stampa ed eventualmente usare
un "offset" di stampa... Aspe' che guglo un po'... trovato questo,
vedi se ti funziona:
http://handsoff.infomedia.it/cgi-bin/lwgate/VB-IT/archives/vb-it.log.9912/Subject/article-36.html
Bye, G.

 
http://handsoff.infomedia.it/cgi-bin/lwgate/VB-IT/archives/vb-it.log.9912/Subject/article-36.html
Se non va, prova a leggere questo thread giusto di un annetto fa,
_forse_ c'era qualcosa di utile:
http://www.google.it/groups?threadm=192Z92Z126Z137Y1042246359X14507%40usenet.libero.it
Bye, G.

fin che dura...
se non fossi stato un tipo fin troppo paziente, con elementi come me avresti
già mandato a quel paese questo ng :-)

[*Paperino* = 
gaet...@hotmail.com
 in
news:bvln4l$tn1p8$
1...@ID-108681.news.uni-berlin.de
] ha scritto:

Io non credo di aver ben capito cosa vuole Paolo, ma mi sta venendo un
dubbio e questo di Zanna, nel contesto, ci sta:
http://makeashorterlink.com/?D26A51547

 non è tanto irrilevante :-)
Ok, fai come hai detto: "Disegna" la tua stampa ipotizzando uno 0 di X e Y,
il più vicini possibili a elementi (di stampa, non di tipografia) certi del
modulo.
Introduci dei correttori dinamici (anche negativi) di X e Y, fai fare delle
prove all'utente, anche a distanza, fintanto che, agendo sugli appositi
correttori, i tuoi posizionamenti di CurrentX e CurrentY (fissi in programma
come da "disegno", ma con +corrX e +corrY da input) siano corretti.

perfetto avevo già fatto così...
Un'ultima domanda, non so se vale la pena aprire un altro post...
ho una msflexgrid già popolata... devo scrivermi io il codice che mi stampi
il contenuto oppure c'è qualcosa di già pronto all'uso?
ad ogni modo grazie mille a tutti voi! siete sempre di grandissimo aiuto!

 stampi il contenuto oppure c'è qualcosa di già pronto all'uso?
La prima, a manina.
Ma, credimi, se fai le cose per bene la routine può essere scritta una volta
per tutte.
Per esempio passando il recordset e non l'estemporaneo testo...

 
http://makeashorterlink.com/?D26A51547
Yep, ridotto all'osso, è lo stesso codice che c'era in uno di quei link,
mi pare. Leggendo i margini via SW evita di dover fare delle prove
a mano (o peggio farle fare al cliente, che potrebbe dare l'impressione
di scarsa professionalità).
Bye, G.

 l'impressione di scarsa professionalitą).
Che strani, a volte, i punti di vista...
A me vien da pensare, invece, ad una grande elasticitą...
Anche perchč, ipotizzando una stampa abbastanza stretta e corta, col
correttore (ok, andrebbe proposto in base ai margini rilevati) l'operatore
puņ "posizionarla" dove vuole nel foglio...

 può "posizionarla" dove vuole nel foglio...
Ehi, Lupo... non so come dirtelo... stiamo dicendo la stessa cosa :-)
A meno che io non abbia bevuto, e finora non mi risulta (per dopo
non mi pronuncio) :-)
Quello che tu chiami "correttore" io l'ho definito "offset"; il concetto
è di leggere questi margini via SW e usarli come valori fissi, da sottrarre
o sommare al momento della stampa, no ?
L'idea della scarsa professionalità si riferiva al fatto di far fare delle
prove al cliente, non all'usare degli offset, anzi. Nel mio lavoro, in cui
uno stesso EPS... beh, lascia stare, è troppo lungo; ma fidati, che
è il metodo _alla base_ del sistema editoriale che usiamo qui. :-)
Bye, G.

 delle prove al cliente, non all'usare degli offset, anzi.
Infatti, per me, nei panni dell'utente, scoprire che posso "spostare la
stampa" senza alzarmi è grandioso, non poco professionale solo perchè devo
fare una prova di adeguamento.
Anche perchè (ma non voglio insistere), posso ben proporre/imporre i margini
rilevati, ma se ho montato (per esempio su una inkjet a cassetto verticale)
il foglio un po' spostato a sinistra o a destra...?

 il foglio un po' spostato a sinistra o a destra...?
Ah, ora ho capito, credo. Nelle varie opzioni, vuoi lasciare la possibilità
per l'utente di intervenire a mano sui margini rilevati in automatico ?
Beh, questa _è_ una buona idea. :-)
Io avrei rilevato i margini ad ogni stampa, per il caso che l'utente
avesse cambiato stampante durante l'uso del programma, ma
anche il tuo metodo ha dei vantaggi. Bisognerebbe unirli, ad esempio
rilevando se la stampante corrente è quella per cui sono stati settati
i margini (manualmente o automaticamente che fosse) e magari
memorizzare un set di margini per ogni stampante.
Bye, G.

 memorizzare un set di margini per ogni stampante.
E' quello che faccio: Per ogni stampa diversa memorizzo tutto, stampante,
font (ove applicabile, come nella stampa di una griglia, per esempio),
modulo, orientamento, correttori, etc. e, alla prossima richiesta della
stessa stampa ripropongo tutto come l'ultima volta. All'operatore basta, per
quella stampa, trovare la combinazione migliore e se la vedrà riproposta
ogni volta. Ohhh, se sbaglia, cavolacci suoi e nonmenepòfregàdemeno (però
gli dico se ci sta in orizzontale o no...)

 richiesta della stessa stampa ripropongo tutto come l'ultima volta.
Ora che ci penso, l'avevi anche già detto tempo fa...
Un Paperino con il mononeurone diesel. :-/

mi piacerebbe realizzare la stessa cosa che fai tu Lupo...
secondo te mi conviene memorizzare il tutto in una tabella del database che
chiamerò impostazioni (in cui memorizzerò anche eventuali altre impostazioni
del programma se possibile) oppure crearmi un file di testo?

[*Paolo C.* = 
pc...@fastwebnet.it
 in
news:A5NTb.22032$
VS6....@tornado.fastwebnet.it
] ha scritto:

E' indifferente. Io lo faccio su una tabella del database, con chiave
univoca (ma testo libero, mooolto libero) sul tipo di stampa.
Ovvio che se già dai per scontata l'esistenza di un database, sarebbe
assurdo inventarsi un file di testo. Crei una tabella e ci metti quel che
vuoi.