Newsgroup: it.comp.lang.visual-basic
Titolo: margini della stampa

ciao
usando l'oggetto printer
ho notato che se cambio stampante   la stampa che mi esce non e' uguale in
tutti i casi,
infatti se io scrivo
printer.print "ilario"
printer.enddoc
la stampa viene effettuata in due punti diversi, quindi penso che i margini
di stampa superiori e sinistro
siano diversi
come posso saper il valore del margine della stampa sinistro e superiore
grazie mille
ciao ilario

 come posso saper il valore del margine della stampa sinistro e superiore
Dopo aver assegnato la stampante alla Printer (unica stampante visibile da
VB), verifica la Printer.<Width Eight> e confrontale con Printer.Scale<Width
Eight>. Queste ultime rappresentano l'area stampabile (le altre la
dimensione fisica del foglio).
Fregatene dei margini, lavora su queste aree, le uniche a tua disposizione.
Al limite (che figata per evitare all'operatore di spostare fisicamente le
guide meccaniche), gioca con Printer.Current<X Y> per introdurre artatamente
degli spostamenti ... "virtuali", ma, alfine, ... fisici

 ha scritto nel messaggio
news:b8to4o$d6jij$1...@ID-174464.news.dfncis.de...

grazie mille
ciao Ilairo

 *ilario* ha scritto:
cioa Lupo
ho fatto cosi' dici che va bene?
dim margsup as single , margsin as single
margsup = printer.height - printer.scaleheight
margsin = printer.width - printer.scalewidth
printer.currentx = x  - margsin
printer.currenty = y - margsup
........
ciao Ilario

*ilario* ha scritto:

No, almeno non ho capito queste ultime due..
chettifrega dei margini? Tu devi stampare e con CurrentX=0 e CurrentY=0 ti
stamperà a partire dall'angolo alto sinistro _disponibile_. Che poi la
scritta sia fisicamente a 2.5 da sinistra e a 6 dall'alto (perchè tali sono
i margini "consumati" per questioni meccaniche e di trascinamento) non ci
puoi fare niente. Quella è la tua area di stampa e non potrai stampare al di
fuori.
Detto questo (e rilevati per pura curiosità i margini come correttamente hai
fatto nelle prime due istruzioni), il mio suggerimento era:
Immagina che sia una stampante a trattori o che il foglio singolo sia
inserito in una posizione un po' troppo a sinistra o un po' troppo a destra.
Bene, senza spostare tali marginatori (che magari sono fisicamente fissati
per qualche modulo particolare) e partendo dal presupposto che le posizioni
logiche dei tuoi punti di stampa (testi, immagini, linee, etc) siano
riferite al punto 0,0 (angolo superiore sinistro, relativamente quindi
all'area stampabile, qualunque essa sia), puoi consentire all'operatore con
due textbox di "spostare" la stampa sul foglio. Il primo lo aggiungerai (va
bene anche con numeri negativi) ai tuoi CurrentX dei vari oggetti, il
secondo ai tuoi CurrentY.
Per esempio, se devi fare una linea alla X 2000 e alla Y 3000, potrai
"correggere" la posizione fisica impostando CurrentX a 2000+val(text1.text)
e CurrentY a 3000+val(text2.text)

 misure 5  e 10
Ora mi è chiaro. Ok.
Mi viene però un dubbio: I margini non sono due (sx e dx) lateralmente e due
(alto e basso) verticalmente. Per cui, è vero che margsup e margsin sono
esatti?, o non rappresentano invece la _totale_ differenza fra la
larghezza/altezza fisica e l'area stampabile (generalmente al centro del
foglio fisico, quindi da dividersi per due, se centrali, appunto) in
orizzontale e in verticale? Fai qualche prova, visto che per te le
dimensioni dei margini costituiscono, di fatto dei "correttori" per la
stampa rispetto alla "grafica" del modulo progettata...


anchio avevo pensato ai 4 margini  quindi da dividere per due la differenza
ma dalle prove che ho fatto la diff e' esatta cosi' ( Maaa la teoria diversa
dalla pratica) ,mi sballa solo di un mm da una stampante ad un'altra , penso
sia per il passaggio di cm * 567
ciao e ancora grazie
Ilario

 sia per il passaggio di cm * 567
Personalmente lavoro sempre in twips, al max in mm, con decimali

 mm
Non so se quel 567 già deriva da queste, ma per le conversioni usa sempre e
solo oggetto.ScaleX e oggetto.ScaleY