Newsgroup: it.comp.lang.visual-basic
Titolo: [OT] stampa su piu fogli

vorrei aggiungere una funzione di stampa-moduli ad un mio prog.
il foglio da inserire č in realta composto di 5 fogli "autocopianti"...
poiche con le stampanti ink jet e laser non č possibile fare questo tipo di
stampe, avevo pensato di proceere cosi:
al momento della stampa, il prog chiede all'utente "sei su una stampante ad
aghi? se sě, allora inserisci il malloppone, altrimenti dividilo e io farň 5
copie della pagina"
l'unico problema č questo. con la stampante ad aghi č assolutamente
impossibile rispettare i margini, perche (almeno la mia) funziona ancora con
la manovella, nel senso che sono io a decidere fino a che punto inserire il
foglio... e quindi la stampa rischia di venire tutta sfalsata...
la mia domanda č: le moderne stampanti ad aghi sono "automatizzate" per
quanto riguarda l'inserimento dei fogli? oppure č una loro prerogativa
quella di avere le manovelle per l'inserimento?
grazie
MarioH

 MarioH
Le mie stampanti ad aghi, di 10 e oltre anni fa,
hanno già il pulsante per il caricamento automatico, e quindi
posizionano sempre il foglio nello stesso punto.
Devi solo dare la possibilità all'utente di poter settare il margine.
Ciao
Sir Jo


ecco, questo aspetto non mi è molto chiaro.
io quando ho preso le coord dei "campi" in cui scrivere i dati (sul modulo),
li ho calcolati dal bordo del foglio, quindi in realta non ho tenuto conto
di margini e via dicendo...
questo vale sia per le stampanti ad aghi sia per le inkjet. ora mi chiedo
come si puo dire alla stampante di NON tener conto di margini superiori e
laterali, ma far sì che , ad es., se imposto la proprieta currenty a 15 mm.,
deve stampare a 15 mm. dal bordo?
insomma, come si "annullano" i margini da VB ?
grazie mille
MarioH

 
printer.scalemode=vbmillimeters
printer.currenty = 15 - ms
dove ms e una variabile contenente la misura del margine superiore,
che per fare le cose per bene puoi rendere modificabile da una finestra,
cosi' puoi fare in ogni momento degli aggiustamenti.
-- 
Samuele Battarra
prova il mio newsreader:
http://digilander.iol.it/battarsa/programmi/leggiminews.html

 ecco, questo aspetto non mi è molto chiaro.
Penso tu lavori con i report (DataReport, ActiveReport o cosa simile),
e avrai notato che nella proprietà del report ci sono
le proprietà TopMargin, LeftMargin, RightMargin e BottomMargin.
Io di solito imposto RightMargin a zero, perchè il report l'ho fatto io
e quindi so dove va a finire (non lo faccio mai tanto largo).
A questo punto fai un form dove chiedi il TopMargin, il LeftMargin
e il BottomMargin su tre TextBox in cui l'utente può inserire
numeri con due cifre dopo la virgola (non sono Euro come starai
pensando) e quindi l'utente può specificare i margini in millimetri.
Salvi questi tre numeri in un file di testo usando
Open "....." for output as #1
Print #1,.......
Close #1
Prima di andare in stampa riapri il file, leggi i tre valori,
e li trasformi in punti di stampante.
(valore in millimetri) * 1440 / 25.4 = (valore in punti)
tieni conto che la stampante (qualsiasi) ha 1440 punti per pollice
(logici, non fisici),e un pollice sono 25.4 millimetri
ora, supponendo che il tuo report si chaimi pippo,
devi assegnare le proprietà dei margini prima di stampare:
Pippo.PageTopMargin = valoreTop
Pippo.PageLeftMargin = valoreLeft
Pippo.PageBottomMargin = valoreBottom
Pippo.Show vbModal
(esempio per ActiveReport)
Divertiti..........
Ciao
Sir Jo

 Penso tu lavori con i report (DataReport, ActiveReport o cosa simile),
no niente report.
invio tutto alla sta,mpante con Printer.Print "xx" e poi alla fine faccio
Printer.EndDoc...
quindi topmargin ecc. non li conosco, e ho visto che non ci sono
nell'oggetto printer... il problema però è che la stampante applica un
marginre superiore ogni volta che faccio l'inserimento automatico del
foglio... e io dovrei annullarlo... mi sembra strano che non ci sia
un'apposita proprieta per recuperare/modificare il margine...
MarioH


ma a me interessa proprio recuperare il valore di MS prima di iniziare le
operazioni di stampa... magari se da VB non si puo fare ci sarą qualche APA
che provvede a cio... chissa...
MarioH

 MarioH
Prima di iniziare a stampare, prova a settare Printer.CurrentX e
Printer.CurrentY a zero.................
Ciao
Sir Jo

MarioH ha scritto:

Mi ricordo (cerca nei post vecchi) che c'era una funzione che permetteva
di sapere larghezza e altezza dell'area stampabile.
Facendo altezza foglio - altezza area stampabile potevi calcolare
la somma di margine superiore ed inferiore.
Non c'era modo pero' di determinarle in modo indipendente.


 
http://digilander.iol.it/battarsa/programmi/leggiminews.html
Invece il modo esiste tramite le api e viene fornito direttamente nel sito
MS all'indirizzo:
http://support.microsoft.com/support/kb/articles/Q193/9/43.ASP
Ho avuto anch'io lo stesso problema e con questo codice funziona alla
perfezione ritornando i margini minimi imposti dalla stampante.
Personalmente ho modificato il codice dell'esempio in modo che i valori
vengano ritornati in centimetri ed eliminando la parte che calcola le
dimensioni dell'area stampabile che a me non servivano.
Buon lavoro a tutti!