Newsgroup: it.comp.lang.delphi
Titolo: Di nuovo stampa sulla LPT

Risolto il sistema di far sě che la stampante (Epson LX-300+) stampi tutte e
sole le righe che voglio io, adesso mi sorge il problema di posizionare la
carta, dopo la stampa, nella posizione di strappo e di recuperarla
all'inizio della stampa successiva.
Ho pensato subito alle sequenze di escape: mando un po' di righe vuote per
allineare la pagina allo strappo e alla stampa successiva le invio un
qualche comando (che non ho ancora trovato) per fargliela "rimangiare"... ma
come si fa a mandare alla stampante le sequenze di escape?
Sul Borland Developer Network ho trovato un esempio del PASSTHROUGH:
 
http://www.mers.com/INPRISE/FAQ/3196.HTML
ma ahimč utilizza BeginDoc ed EndDoc che fanno si che mi esca un foglio
dalla stampante, e questo non va bene (come direbbe Er Pantera: "Non č
bello!").
Qualcuno ha qualche idea per sistemare la stampa alla posizione di strappo e
recuperare la carta?
        Marco
        info @ 
marcobortolani.it

 ha scritto nel messaggio
news:nPFoc.247969$rM4.10...@news4.tin.it...


 Writeln([ var F: Text; ] #18 );   imposta 80 car per riga
Non ho capito.
Metti caso che io abbia questa routine:
procedure TFormMain.Button1Click(Sender: TObject);
var lst:textfile;
    i:integer;
begin
    // Qui vorrei che la stampante tornasse indietro di x righe
    // ...  AIUTO!!!
    assignfile(lst, 'lpt1');
    rewrite(lst);
    // Stampo 24 righe
    for i := 1 to 21 do
    begin
        writeln(lst, '    Riga ' + IntToStr(i));
    end;
    writeln(lst, '');
    writeln(lst, '');
    writeln(lst, '');
    // Qui farei stampare x righe vuote per posizionarmi sullo strappo
    //...
    closefile(lst);
end;
Mi piacerebbe che dopo la stampa delle 24 righe il foglio andasse alla
posizione di taglio e prima della stampa successiva tornasse indietro:
siccome il formato č custom, devo fare tutto a mano e non so da che parte
prendere...
Ringrazio in anticipo
    Marco

Ciao, prova qui  
http://mariottim.interfree.it/doc0e_i.htm
io ho trovato alcune soluzioni ai miei problemi, non so per far 'mangiare' 
la carta ma sicuramente roverai qualcosa.
Inviato da 
www.mynewsgate.net

> Ciao, prova qui  
http://mariottim.interfree.it/doc0e_i.htm
Ti ringrazio, ma l'avevo giŕ trovato.
Il mio problema non č solo quali sequenze di escape mandare alla stampante,
ma soprattutto come fare a mandargliele.
Se hai qualche dritta in questo senso, č bene accetta.
Saluti
        Marco
        info @ 
marcobortolani.it

Adesso non ho i sorgenti da vedere del programmino che avevo fatto e non mi 
ricordo come avevo fatto, se hai pazienza stasera gli dò un occhio e te lo 
scrivo.
Inviato da 
www.mynewsgate.net

 
Io da povero principiante ho sofferto molto per stampare proprio sulla 
LX-300+. :(
Per le 24 righe (ebbene sě, anche io 24 righe...) ho fatto cosě:
procedure StampaSuLPT1(Sender: TObject);
const
    cRighe = #27#67#24; //numero di righe del foglio = 24
    cEject = #12;
    c10cpi = #18;
    c12cpi = #27#77;
    c17cpi = #15;
    cIExpanded = #14;
    cFExpanded = #20;
var port: TextFile;
begin
   AssignFile(port, 'LPT1');
   Rewrite(port);
   WriteLn(port, cRighe + 'Testo da stampare ' + cIExpanded +
          'Testo largo');
   Write(port, cEject);
end;
Questo per quanto riguarda l'invio delle sequenze di escape, 
sinceramente non so se ci sia anche un codice per il TearOff, io ho 
dovuto impostarlo direttamente sulla stampante con i suoi simpatici 
pulsantini.

 scrivo.
Ho pazienza: ti ringrazio in anticipo.
        Marco
        info @ 
marcobortolani.it

 LX-300+. :(
Hai la mia comprensione (sigh! sob!) :-((
Ebbene: questa cosa che mi hai mandato sembra (lo dico senza enfasi, per non
autogufarmi) funzionare a me-ra-vi-glia.
procedure TFormMain.Button4Click(Sender: TObject);
const
    cEject = #12;
var ft: TextFile;
    i: Integer;
begin
    AssignFile(ft, 'LPT1');
    Rewrite(ft);
    for i := 1 to 21 do
    begin
          writeln(ft, '    xxx ' + IntToStr(i));
    end;
    Write(ft, cEject);
    CloseFile(ft);
end;
La stampante stampa le 21 righe e il comando di eject, che viene eseguito
dopo pochi secondi dopo l'ultima stampa. Siccome poi avevo impostato anch'io
il TearOff con i "simpatici" pulsantini, la stampante dopo due secondi di
fermo mi vomita... ehm... ejecta il foglio e se lo riprende alla stampa
successiva, posizionandosi correttamente.
A me mancava il cEject. A buon rendere.
Saluti
        Marco Bortolani
        info @ 
marcobortolani.it

La soluzione che avevo trovato (copiato per meglio dire) è uguale a quello che 
già ti ha detto r.o.c.
è leggermente diversa in modo che l'utente possa scegliere come stampare
.......
Const
FormFeed=#12;
Condensed=#15;
Normal=#18;
Procedure StampaLista(Lista:TStrings; NuovaPagina:Boolean;Condensato:boolean);
var
 p:TExtFile;
 g:Integer;
begin
  if Assigned(lista) then
    begin
      AssignFile(p,'LPT1');
       Rewrite(p);
         try
           if Condensato then
             WriteLn(p,condensed);
              try
               for g:= 0 to pred(lista.Count) do
                Writeln(p,Lista[g]);
               finally
                if Condensato then
               WriteLn(p,Normal);
              end;
             if NuovaPagina then
              WriteLn(p,Formfeed);
           finally
            CloseFIle(p);
           end;
         end;
       end;
.......
Ho visto che già hai risolto ma magari ti dà un'idea in più
Ciao.
Inviato da 
www.mynewsgate.net