Salto de linha 1/6 e 1/8 em impressora matricial

Delphi

27/05/2005

Olá pessoal, tudo blz?
Estou utilizando TPrinter em um programa de impressão de relatórios e gostaria de saber como é possível controlar o salto de linha em 1/6 e 1/8.
Obs.: 1) já tentei utilizar Write(prnfile, #2764) para 1/6 e Write(prnfile, 2748 ) para 1/8 e não tive sucesso.
2) O padrão das impressoras matriciais é 1/6 mas tenho relatórios que imprimem no modo normal (Draft 10cpi) que imprimem em 1/8! Que maluco, né!?

Bom, caso alguém tenha alguma dica ela será muito bem vinda!

Obrigado pelas dicas! :-)


Jorgeolimpia

Jorgeolimpia

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

27/05/2005

Não trabalho com impressão direta, mas vc poderia dar uma olhada no componente [url=http://devres.freeprohost.com]VDOPrinter[/url].


GOSTEI 0
Vinicius2k

Vinicius2k

27/05/2005

Colega,

O controle #2764 (ESC+´@´), inicializa/reseta a impressora. Se ela estiver configurada para 8 LPI (internamente), o reset não produz efeito.

Independente da configuração interna da impressora, o controle 2748 (ESC+´0´) seta o espaçamento vertical para 1/8´ e o controle 2750 (ESC+´2´) para 1/6´.

Uma lista completa dos escapes de controle vc encontra [url=http://forum.clubedelphi.net/viewtopic.php?p=203708203708]aqui[/url].

Espero ter ajudado.

PS: Creio ter havido um pequeno equívoco na formulação de sua questão: Vc não está utilizando TPrinter. Vc está utilizando ´escrita de arquivo na porta.´

T+


GOSTEI 0
Jorgeolimpia

Jorgeolimpia

27/05/2005

Blz Vinicius2k, é por aí mesmo!

Soh vou ter que fazer um controle de contagem de linhas e existência de FormFeed, mas já ajudou bastante.

Obrigado!


GOSTEI 0
Jorgeolimpia

Jorgeolimpia

27/05/2005

Olá Vinicius2k e demais do fórum, blz?
Realmente estou usando impressão direta (AssignPrn, WriteLn...) e gostaria de tirar uma dúvida em relação ao VDOPrint:
Hoje estou imprimindo um relatório com WriteLn(arquivo, ´conteudo´), soh que este conteúdo tem que ter o espaçamento de linha igual a 1/6. Até consegui com o comando #2750 que me recomendou. Aí encontrei outro problema: o salto de página ativou! E mesmo inserindo 27+´O´ a mesma não desativou, enfim, no VDOPrint existe esta condição de, ao fazer a impressão de uma linha a próxima já vir com este salto de 1/6 pré-definido?
Detalhe: o arquivo que estou imprimindo é um arquivo texto contínuo, sem formatação, só com CR/LF e nada mais!

Obrigado pela atenção e pelas dicas! :-)


GOSTEI 0
Vinicius2k

Vinicius2k

27/05/2005

Olá !

No VDOPrint vc pode configurar se existirá ou não salto sobre o picote e, se existir, quantas linhas serão saltadas. Para que funcione corretamente, é necessário configurar o número de linhas a ser impressa na página (66 para 6 LPP, 88 para 8 LPP ou metade destes valores caso seja formulário razão).

Este problema enfrentado por vc é novo para mim se for relacionado ao controle da impressora. Se eu não estiver enganado a Epson LX-810 é ´problemática´ quando se trata de salto sobre picote, pois me parece que ela é ´travada´ para salto com 56 linhas. Não seria este o modelo que vc está testando, seria?

Tente controlar toda a configuração da impressora, a começar pelo número de linhas por página (#27+´C´+?), passando pela ativação do salto e determinação de quantas linhas saltar (27+´N´+?), e finalizando com o espaçamento vertical em 6 LPP (27+´2´).

T+


GOSTEI 0
Jorgeolimpia

Jorgeolimpia

27/05/2005

Olá Vinícius2k e demais usuários do fórum...

Quanto a impressora que estou utilizando para testes é uma EPSON FX-2170.
Desde a sua última dica, sobre os controles de página etc..., o que consegui usar com sucesso foi a questão do salto de 1/6 na linha.
Para ilustrar melhor o meu problema fiz o seguinte: digitei um texto qualquer em 80 linhas. Imprimi este texto a partir do DOS usando TYPE ARQ.TXT > PRN. Como ele captura o status atual da impressora (dei um reset antes) imprimiu o documento com fonte Draft 10cpi, 1/6 de salto de linha e não houve quebra de página. Ao fazer a mesma impressão simples, só que pelo programa em Delphi o salto de linha foi para 1/8. Antes de imprimir este arquivo eu o abro em um RichEdit e para imprimir faço o seguinte:
...
for i := 0 to RichEdit1.Lines.Count - 1 do
WriteLn(prnfile, RichEdit1.Lines.Strings[i]);
...

Sei que os comandos de impressão funcionam normalmente para o modelo que estou testando, então devo considerar que eu estou errando na hora de passar esta configuração. Devo inserir estes comandos dentro do WriteLn() ou fazer um Write() só com estes comandos e depois imprimir o restante?

Obrigado pelas dicas e paciencia também! :-)


GOSTEI 0
Vinicius2k

Vinicius2k

27/05/2005

Talvez eu não possa lhe ajudar muito, porque não trabalho e nunca trabalhei com WriteLn() ou Write(). Mas, teoricamente, a única diferença do Write() para o WriteLn() é a inserção de um CR/LF que o WriteLn faz ao final da passagem da String.

No seu caso, como vc deseja apenas controlar/configurar a impressora, eu utilizaria o Write() com a configuração desejada antes do seu laço com FOR.

T+


GOSTEI 0
POSTAR