Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Printer.Width, Printer.Height su Windows XP

Ciao,
    ho relizzato molti programmi in VB6 che effettuano stampe
con formati di pagina non standard. Con Win98 utilizzando
Printer.Width e Printer.Height ero in grado di settare i
vari formati. Ora con WinXP, per le stampanti che ho a
disposizione, non è più possibile farlo. Cercando su Google
ho visto che sono in molti ad avere il mio stesso problema
ma nessuno lo ha ancora risolto. Alcuni hanno trovato come
soluzione l'aggiunta di un nuovo formato di pagina direttamente
nel Server di Stampa:
Avvio ->
Impostazioni ->
Stampanti e Fax ->
Menù File (senza selezionare alcuna stampante) ->
Proprietà Server -> Crea un nuovo modulo.
E l'utilizzo di tale formato da VB6 (cosa che non sono ancora
riuscito a far funzionare in quanto non so come dire da Visual Basic
allo spooler di stampa di utilizzare uno dei nuovi formati di stampa
che ho creato).
La soluzione è carina, ma forse sarebbe meglio riuscire direttamente
da VB6 a creare i formati di carta (e a dire allo spooler di usarli).
In questo modo credo sia possibile continuare a stampare con l'oggetto
Printer senza stare a riscrivere tutte le funzioni di stampa.
Per fare questo immagino che WinXP memorizzi i formati di carta nel
registro di configurazione. Per caso qualcuno ha risolto il problema?
Qualcuno ha qualche idea?
Considerate però che ho decine di programmi scritti con l'ogetto
Printer, per cui preferirei trovare una "pezza" per risolvere il
problema.
    Un saluto a tutti.
    Dino

 ha scritto nel
messaggio news:b9annv$rdg$1...@fata.cs.interbusiness.it...


 Perchč non usi ScaleWidth e ScaleHeight ?
Perchč queste proprietą non servono per settare le dimensioni di
una pagina, ma per crearti una scala di coordinate personalizzata.
Se ad esempio hai una fattura in un formato di stampa non standard,
devi usare per forza printer.width e printer.height per settare le
dimensioni della pagina.

Secondo me c'è un errore di fondo:
Pui anche dire all'oggetto printer che formato di carta usi, ma in teoria,
bisognerebbe dirlo anche alla stampante nelle sue impostazioni. Infatti le
stampanti "serie" segnalano un errore ne formato della carta se la
dimensione (il tipo di foglio da usare) non è disponibile in uno degli
eventuali cassetti di cui la stampante dispone, forzando l'utente a premere
un tasto. Se non viene specificato il cassetto (selezione automatica), ma
solo il tipo di foglio, la stampante selezionarà in modo automatico il
vassoio della carta più adatto al formato specificato. Stampanti meno serie
(generalmente stampanti che hanno un solo cassetto per i flogli) ignorano il
problema (tanto il folgio lo possono prendere dall'unico cassetto
disponibile) e stampano sopra quello che c'è. Io personalmento "seleziono"
il formato del foglio più adatto (A5, A4, o A3) anche se il foglio
effettivamente utilizzato non è quello. Alla stampante (seria o non) non
interessa "l'effettiva" misura del foglio, (tanto comunque il tuo non
adrebbe comunque a stampare fuori dalla sue dimensioni). Per esperienza
posso dirti che molti cartellini con codici a barre sono più piccoli di un
A5, ma io comunque stampo su un A4 (per quanto riguarda la dimensione del
foglio specificata sulla stampante). In pratica la dimensione del foglio ha
un significato solo per le stampanti con piu vassoi per dirgli usa A4, A5 o
A3 e lei seleziona il vassoio in base alla dimensione del foglio specificata
(perche windows non sa quale vassoio contiene effetivamente l'A3). Se
infatti si specifica si il Vassoio che la dimensione del foglio si possono
avere 4 casi (Il formato del vassoio è quello giusto, tutto Ok, Il formato
del vassoio non è giusto: a) la stampante si pianta (stampante di merda); b)
la stampante segnala l'errore e seleziona il foglio dal vassoio più idoneo;
c) la stampante segnala l'errore e adatta la stampa al foglio contenuto nel
vassoio specificato.
Personalemente conosco molto bene il problema delle stampe (mantengo e svilu
ppo un server di stampa di documenti (dalle fatturen alla cartelle colori
dei campionari, ai cartellini pezze) e personalmente con questo sistema non
ho mai avuto problemi (W95, W98 (anche se non gli usiamo visto i loro
problemi di gestione della memoria), NT4, W2000 e WXP).
PS
Nella gestione delle stampanti per windows xp la proprietà "Ottimizzazioni
Stampa" funziona in modo opposto a W2000, ovverro se su xp è attivo si
comporta come su W2000 disattivo e viceversa.
Dario Di Marino

*Sabato Parolisi* ha scritto:
...
Vedi il topic
[?] Printer PaperSize, Width, Height
Sembra che siamo in pochi a usare moduli continui, magari a dimensioni non
standard ;-)

 dimensione (il tipo di foglio da usare) non è disponibile in uno degli
Di solito quando si stampano 300 alla volta, si preferisce stampare
tramite stampante ad aghi e su fogli più piccoli dell'A4 e in modulo
continuo (o per lo meno queste sono le scelte aziendali previste dove
lavoro io). Da Visual Basic tale tipologia di stampa io l'ho gestita
con il classico:
Printer.Width = 21 * mm
Printer.Height = 10.15 * mm
Do until TabellaFattura.EOF
    Printer.Print "FATTURA: " & TabellaFattura.("Numero")
    Printer.NewPage
Loop
Printer.EndDoc
Se non setti correttamente Printer.Width e Printer.Height,
Printer.NewPage non funzionerà mai correttamente. Anzi mi
spiego meglio: Printer.NewPage non salterà mai correttamente
allo strappo di pagina successivo. Ora sicuramente ci sono
10 modi diversi di stampare con Visual Basic, ma dato che ho
scelto questo e ho realizzato 150 programmi che stampano tutti
alla stessa maniera e da 5 anni a questa parte non mi hanno mai
dato problemi di stampa con Win95, Win98 e WinME, ora non mi
resta che trovare un comando da dare prima del:
Printer.Width = 21 * mm
Per risolvere il problema. Ora la mia domanda è (e mi ripeto
nuovamente): "C'è qualcuno che ha trovato la soluzione?".
    Grazie.

 ha scritto nel
messaggio news:b9d46j$j6j$1...@fata.cs.interbusiness.it...


 problemi di gestione della memoria), NT4, W2000 e WXP).
Da quanto leggo, mi par di capire che usi solo stampanti a fogli. Anche M$
ha, evidentemente, questa presunzione.
La realtà prevede (secondo me in misura persino maggiore) anche stampanti in
modulo continuo, magari con dimensioni stranissime, non standard. Queste,
pur con il loro driver corretti e aggiornati, creano problemi. A queste M$
non ha posto attenzione e, come spesso accade, ha lasciato lo smazzamento al
programmatore, l'entità che M$ meno considera, anche se è quella che, in
fondo, giustifica l'esistenza di M$ stessa.

 ha scritto nel messaggio
news:b9di70$i9gol$1...@ID-174464.news.dfncis.de...

Perfettamente daccordo.
Sottoscrivo.
Il mio problema resta.
La M$ mi ha rotto... ma purtroppo non ha solo il coltello dalla
parte del manico... e nemmeno solo il manico, ha tutto lo stabile
dove risiede il coltello!

 Il mio problema resta.
Hai letto quel topic che ti ho citato?
http://makeashorterlink.com/?U26615D74

 ha scritto nel messaggio
news:b9dlv0$hh17t$1...@ID-174464.news.dfncis.de...

Si lo avevo letto ancora prima di postare (lo faccio sempre),
infatti nel messaggio ho riportato la procedura, e ho anche detto
che non riesco ancora farla funzionare. Riesco ad inserire un
nuovo formato ma non riesco a farlo funzionare da VB:
io stampo in 21mm*10.16mm e impostando tali dati nel
Server di Stampa e lanciando da VB6SP5
printer.width = 21 * mm        'mm = 567
printer.height = 10.16 * mm    'mm = 567
Mi continua a stampare in A4.
Ho contattato la Epson che mi ha detto solo come configurare
un nuovo formato (cosa che già sapevo fare), ma ovviamente di
VB non ne sanno niente.
Inoltre, come avevo già esposto, se anche riesco a farlo
funzionare, saebbe bello riuscire ad inserire tale formato
nel server di stampa automaticamente da Visual Basic.
    Ciao.

 Mi continua a stampare in A4.
Prova a lavorare in twips, insomma nell'unità di misura standard della
Printer.
Ti garantisco che seguendo le indicazioni di David Ruscelli di quel topic e
dichiarando dimensioni a quel punto "note" per l'ambiente, tutto funziona.
Leggi anche quel link in fondo a quei post, io con NT/2000/XP non sono mai
riuscito a far funzionare la normale CommonDialog per la ShowPrinter, ho
usato una serie di API che là dovrebbero essere citate.
Credo che il tutto sia qui: 
http://makeashorterlink.com/?B24C36D74

Scusate, ma le stampanti ad aghi funzionano con il vbCrLf e con il
vbFormFeed, non penso che servi altro visto che qui sono 20 anni che
stampiamo da unix su stampanti ad aghi. Se le usate in grafica non credo
siano per grandi volumi di stampa data la loro lentezza. Se il problema è il
codice a barre allore il cliente "compra" una stampante che sia in grado di
stamparlo in maniere nativa (sequenza escape) altrimenti, come si dice dalle
mie parti (mi sento tanto Pasquale), si vuole fare le nozze con i fichi
secchi.
Dario Di Marino

 Scusate, ma le stampanti ad aghi funzionano con il vbCrLf e con il

Credo che tu abbia letto un po' superficialmente... ;-)

 Credo che tu abbia letto un po' superficialmente... ;-)
Come al solito mi associo;-)

 Printer.
Appunto, lavoro in twips:
21 * 567 = 11907
10.16 * 567 = 5760
Comunque ci farò altri test (ora ho cambiato PC e sono
passato a XP, per cui DEVO risolvere il problema).
Per lo showprinter finora non ho avuto ancora problemi
per cui non me ne sono occupato (per ora mi seleziona
la stampante e questo mi basta).
    Infiniti ringraziamenti.

 > siano per grandi volumi di stampa data la loro lentezza. Se il problema
č


 impostare le misure del foglio? Quale vantaggi ne trai a farlo?
Il foglio č quello e quello bisogna trattare. Non credo sia per sfizio, ma
per necessitą.

 impostare le misure del foglio? Quale vantaggi ne trai a farlo?
Perchè io stampo una pagina, poi lancio
Printer.NewPage (o Printer.EndDoc)
e a questo punto mi aspetto di trovarmi ad inizio pagina
successiva, mentre se non imposto bene le dimensioni
del foglio il salto pagina non avviene correttamente.
Io sono un tipo paziente e tu sembri una persona sinceramente
interessata al problema e per questo ti ringrazio, ti chiedo
però la cortesia di non chiedere più perchè noi comuni
mortali stampiamo in questo modo, altrimenti sarei portato a
pensare che stai cercando di farmi perdere il buonumore;-)
HE HE HE
    Ciao e Grazie!

Alcune cose sono semplicemente indicative. Continuo a non vedere la
differenze tra dirgli, o no, quanto misura la carta.
Dario Di Marino



 differenze tra dirgli, o no, quanto misura la carta.
Senti, come fai a dire alla stampante di passare a foglio nuovo?
Va bene, se č un foglio singolo gli dici "sparalo fuori", magari
inventandoti un'altezza immensa.
Ma se č un modulo continuo (continuo, capito?) e _ogni_ fattura č alta
esattamente (invento) 16,78 cm ed appiccicata/attaccata alla precedente?
No, non puoi dire che il "modulo" č alto 70 metri (ho detto metri) e
posizionarti con un CurrentY per andare al prossimo modulo, perchč il
sistema (nella fattispecie XP) non ti riconosce quell'altezza e ti forza
alla dimensione del modulo di default (normalmente A4).

 ha scritto nel
messaggio news:b9e0lq$i7ht1$1...@ID-194137.news.dfncis.de...


 posizionarti con un CurrentY per andare al prossimo modulo, perchè il


 "reale" del modulo su una stampante che vive ad interlinee.
Ma tu lavori con comandi diretti (sequenze) via parallela, non con l'oggetto
Printer. Ho capito male?

 di 1/6 di pollice (è quello standard).
Dario, abbi pazienza. Quello che dici è _verissimo_, ma valido per la stampa
da DOS o in GWBASIC o in Basic Professional. Ora si lavora considerando il
foglio che sta sotto come se fosse un'area da disegnare, anche se non si fa
grafica "pura". Il concetto di interlinea non esiste più, quindi non esiste
più il numero di righe ... tipografiche. Ora si dice: Stampa questa cosa là,
alla X e Y che ti dico io. Anche se quella cosa è una banalissima scritta...

 ha scritto nel messaggio
news:b9fthi$j4gp8$1...@ID-174464.news.dfncis.de...


 ha scritto nel messaggio
news:b9ft4e$imnp5$1...@ID-174464.news.dfncis.de...


 un punto di vista diverso.
VB e l'oggetto Printer (insieme col Driver per Windows della stampante) ti
invitano, e ti costringono, a lavorare così. La margherita e la matrice di
aghi, persino la catena e la martelletto, devono stampare (se c'è il driver
per Win) dove dico io! E io il concetto di righe da 1/6 o da 1/8 e le
colonne/font a passo fisso da 10cpi, 12cpi 17.68cpi l'ho dimenticato da un
pezzo...

 x,y come dovrebbe funzionare?. Secondo me c'erchi di usare una stampante
ad
Voce del verbo "ercare"
Io erco
Tu erchi
Egli erca
Noi erchiamo
Voi ercate
Essi ercano
Scusa, scusa!!! Non ho resistito! Perdono! ;-)