Newsgroup: it.comp.lang.delphi
Titolo: Stampante via windows e formfeed

Ciao,
sto sviluppando un programma su XP che stampa delle etichette grafiche
e mi sono scontrato con una particolarità dei moderni sistemi
operativi che pare non abbia soluzione: possibile che alla chiusura
del processo di stampa windows estragga l'ultima pagina dalla
stampante? Non c'e' modo di dirgli: chiudi il processo e non non
muovere il foglio da dove si trova?
Mi serve perché le etichette sono su modulo continuo e spesso il
cliente ne stampa una-due alla volta.
Tnx!
Gp

 cliente ne stampa una-due alla volta.
Se chiudi una stampa, il modulo avanza alla successiva: credo che sia 
un comportamento della stampante, vedi sopra..
-- 
Morde

 ha scritto nel messaggio 
news:4993...@newsgate.x-privat.org...

Impostando nel pannello di controllo la lunghezza
pagina della stampante ad un'etichetta ?
Forse la pagina è impostata A4
C. 

 driver puoi parlare tramite l'SDK.
Grazie per la risposta.
Ma se per SDK intendi accedere via escape command sulla porta
parallela, questo è quello che normalmente già facevo in DOS. Mi
spiego meglio:
Nel prg. DOS pilotavo direttamente la stampante sulla parallela
inviando gli appropriati comandi alla stampante.La limitazione è che
così stampi solo testo e solo per quella specifica stampante (p.e.:
per la DOPPIA ALTEZZA del font usi #27+'w'+#1 per EpsonLQ e #28+'V'+#1
per NecP2).
Ora sto portando il prg. sotto Win con delphi e sto sfruttando le
potenzialità di Win per la stampante. Ad esempio per il grassetto, il
corsivo, il colore e altro, non ti interessa sapere che stampante hai.
Fai semplicemente cosi':
  with printer do begin
      BeginDoc;
      Canvas.brush.style:=bsSolid;
      Canvas.brush.color:=clGreen;
      ...  // qui stampi quello che ti pare in grassetto verde
     EndDoc;
  end;
Ma quel benedetto 'EndDoc' mi fa l'estrazione di pagina!
Gp :-(

 Forse la pagina è impostata A4
Provato ma non funzia: sul foglio ci sono 7 etichette su una colonna
ma, impostando la stampante con le dim. del foglio pari ad un'unica
etichetta, alla fine della prima etichetta il driver spara un bel form
feed tirandomi fuori tutto.
Hai presente quando le etichette fanno un form feed per 3-4 secondi?
Gp :-(


Aggiungo anche questa considerazione: non sono sicuro che il problema
abbia soluzione.
Ho scaricato dei sw demo che stampano etichette per capire come fanno
e ho notato che tutti estraggono la pagina alla fine del processo e
risolvono il problema che ho io permettendoti di iniziare a stampare
dalla etichetta N del foglio.
Mi spiego: hai un foglio di 7 etichette su una colonna. La prima volta
stampi l'etichetta che ti serve (ovviamente) in prima posizione. Per
non buttare il foglio con le altre 6, poi, appena devi stampare una
seconda etichetta rimetti lo stesso foglio nella stampante e dici al
SW di stampare dalla posizione 2. Etc.
Ovviamente questo è un work-around perché non funzia con il modulo
continuo e ti obbliga a reinserire il foglio ogni volta con il rischio
di rovinarlo (avete mai rimesso un foglio 6 volte in una stampante?)
Gp :-(
di stampare di nuovo

 Ma quel benedetto 'EndDoc' mi fa l'estrazione di pagina!
http://www.experts-exchange.com/Programming/Misc/Q_21870116.html
https://forums.codegear.com/thread.jspa?messageID=64282
sembra essere un comportamento di default...
Facci sapere
ciao
-- 
Morde


Ciao,
nelle preferenze di stampa hai impostato la Carta/Qualità per usare 
l'alimentazione a trattore ed impostato la lunghezza del modulo continuo 
alle dimensioni giuste?
Che stampante usi?
Fai una prova installando una stampante generica/solo testo, nelle 
impostazioni di questa c'è un opzione che dice 'senza salto pagina sul 
modulo continuo', chiaramente con questa stampi solo testo non grafica 
come tu credo voglia fare.
In ogni caso la soluzione và cercata a mio avviso nel settaggio delle 
impostazionei della stampante il comando EndDoc non manda un salto 
pagina.
Ciao
Stefano
--- posted by geoForum on 
http://www.delphiedintorni.it

 sembra essere un comportamento di default...
Grazie. Come detto sopra farò le debite prove e vi informerò
Gp


allora ho avuto lo stesso problema non con le etichette ma con fogli
A4 normali
dovevo stampare un registro riga per riga ad ogni operazione
dell'utente corrispondevano una o più righe da stampare.
la stampante era una Epson LX-300
Dopo aver perso un pò di tempo in ricerche varie avevo trovato questo
pezzo di codice VB6
Dim lReturn As Long
Dim lpcWritten As Long
Dim sWrittenData As String
Dim lDoc As Long
Dim MyDocInfo As DOCINFO
    lReturn = OpenPrinter(Printer.DeviceName, lhPrinter, 0)
    If lReturn = 0 Then
        MsgBox "The Printer Name you typed wasn't recognized."
        Exit Sub
    End If
    MyDocInfo.pDocName = "AAAAAA"
    MyDocInfo.pOutputFile = vbNullString
    MyDocInfo.pDatatype = vbNullString
    lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)
    Call StartPagePrinter(lhPrinter)
    sWrittenData = "Arturo è grande..." & vbCrLf
    lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, Len
(sWrittenData), lpcWritten)
    sWrittenData = "E Gaetano è il suo profeta." & vbCrLf
    lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, Len
(sWrittenData), lpcWritten)
    lReturn = EndPagePrinter(lhPrinter)
    lReturn = EndDocPrinter(lhPrinter)
    lReturn = ClosePrinter(lhPrinter)
che mi permetteva di stampare le singole righe senza avere
l'avanzamento di pagina.
il problema era che l'output era alquanto penoso, credo che il
problema fosse che bisognava impostare i font di stampa prima di
stampare.
ma per mancanza di tempo ho abbandonato come soluzione.
la soluzione definitiva lo trovato con FastReport che supporta le
stampanti ad aghi e gestisce in automatico gli escape command di
epson, ibm e hp
oltre che hai PageBreak, ecc.
il report costruito in 5 minuti ;)
visto che non volevano utilizzare il modulo continuo ma i singoli
fogli A4 ho impelmentato un contatore di righe in modo da gestire il
salto pagina e l'inserimento dei nuovi fogli.
ciao