simoesluciano Postado Outubro 9, 2006 Denunciar Share Postado Outubro 9, 2006 Como imprimir direto na LPT1 via Delphi com Windows XP?Já usei o código abaixo e não funcionou. AssignFile(Arquivo, 'LPT1'); Rewrite(Arquivo); Write(Arquivo, 'TEXTO'); CloseFile(Arquivo);Obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Kikonanet Postado Outubro 13, 2006 Denunciar Share Postado Outubro 13, 2006 Olá,Dê uma olhada neste linkhttp://scriptbrasil.com.br/forum/index.php...l=imprimir+memo[]'s Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 paulobergo Postado Outubro 18, 2006 Denunciar Share Postado Outubro 18, 2006 Direto do meu XP, imprimindo tanto para a porta como para uma impressora da rede...Var ftOutFile: TextFile; sOutPort: String;Begin sOutPort := 'LPT1'; // Também pode ser: sOutPort := '\\fatura\citizen.prn'; = uma impressora compartilhada. citizen.prn é o // nome do compartilhamento. E' importante ter o ".prn", para manter compatibilidade com outras formas // de direcionar uma impressão para uma impressora na rede... p.e., Clipper, Turbo Pascal, Basic : ) // ou sOutPort := 'c:\temp\texto.txt'; = gravando diretamente em um arquivo AssignFile(ftOutFile,sOutPort); ReWrite(ftOutFile); WriteLn(ftOutFile,'Isso vai ser impresso!'); WriteLn(ftOutFile,'Isso, a seguir, vai fazer a página avançar'); Write(ftOutFile,chr(12)); // WriteLn para dar um cr+lf automático em cada linha. // Write para enviar só o comando #12 e avançar a folha... se usasse WriteLN, depois de avançar, ainda // haveria um "carriage return" e um "line feed" CloseFile(ftOutFile);End;Ok? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Outubro 26, 2006 Denunciar Share Postado Outubro 26, 2006 Como faço para dizer em qual coluna vou imprimir o texto da linha abaixo?WriteLn(ftOutFile,'Isso vai ser impresso!'); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Clemilson Postado Outubro 26, 2006 Denunciar Share Postado Outubro 26, 2006 Como faço para dizer em qual coluna vou imprimir o texto da linha abaixo?WriteLn(ftOutFile,'Isso vai ser impresso!'); :blink: Obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 paulobergo Postado Outubro 27, 2006 Denunciar Share Postado Outubro 27, 2006 Não faz...Você deverá formatar a linha a ser impressa, montando cada coluna da forma como desejar, completando com espaços ou "zeros" as strings referentes aos campos dos registros...1) Procure, nos foruns e outros sites, uma função que completa com espaços ou zeros uma string, tanto à direita, como à esquerda, e que, de quebra, possa, também, centralizar uma string;2) Use estas funções para montar as suas strings a serem impressas. Imagine uma lista simples, com o nome do apresentador e sua renda, e que você precise imprimir esta lista bem formatada: sNome[1] := 'FAUSTO'; sNome[2] := 'RATINHO'; sNome[3] := 'SILVIO SANTOS'; sNome[4] := 'CELSO FREITAS'; sNome[5] := 'TOM CAVALCANTI'; vRenda[1] := 25000; vRenda[2] := 5000; vRenda[3] := 50000; vRenda[4] := 10000; vRenda[5] := 3500; WriteLn(ftOutFile,' Nome do Sujeito ',' Renda R$ '); WriteLn(ftOutFile,'------------------------------','-------------'); Nome[1]+' '+FormatFloat('###,###,##0.00',vRenda[1]); WriteLn(ftOutFile,sNome[1]+' '+FormatFloat('###,###,#0.00',vRenda[1])); WriteLn(ftOutFile,sNome[2]+' '+FormatFloat('###,###,#0.00',vRenda[2])); WriteLn(ftOutFile,sNome[3]+' '+FormatFloat('###,###,#0.00',vRenda[3])); WriteLn(ftOutFile,sNome[4]+' '+FormatFloat('###,###,#0.00',vRenda[4])); WriteLn(ftOutFile,sNome[5]+' '+FormatFloat('###,###,#0.00',vRenda[5])); O código acima vai produzir um resultado ruim, sem formatação... Então, Você precisa: a) Completar com espaços, à direita, os nomes, até o total de 30 (trinta) espaços... B) Completar com espaços, à esquerda, os valores, até o total de 13 (treze) espaços... Considerando que você crie uma função que faça isso, que essa função tenha o nome de "Complete", e que aceite, como parâmetros, a string, o tamanho desejado e a quantidade de espaços, você deveria usar isso: WriteLn(ftOutFile,' Nome do Sujeito ',' Renda R$ '); WriteLn(ftOutFile,'------------------------------','-------------'); WriteLn(ftOutFile,Complete(sNome[1],30,'D')+' '+Complete(FormatFloat('###,###,#0.00',vRenda[1]),13,'E')); WriteLn(ftOutFile,Complete(sNome[2],30,'D')+' '+Complete(FormatFloat('###,###,#0.00',vRenda[2]),13,'E')); WriteLn(ftOutFile,Complete(sNome[3],30,'D')+' '+Complete(FormatFloat('###,###,#0.00',vRenda[3]),13,'E')); WriteLn(ftOutFile,Complete(sNome[4],30,'D')+' '+Complete(FormatFloat('###,###,#0.00',vRenda[4]),13,'E')); WriteLn(ftOutFile,Complete(sNome[5],30,'D')+' '+Complete(FormatFloat('###,###,#0.00',vRenda[5]),13,'E')); Ok? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Clemilson Postado Outubro 27, 2006 Denunciar Share Postado Outubro 27, 2006 Excelente! Agora entendí melhor! Muito Obrigado mesmo!No meu caso, não preciso dos títulos das colunas pois é pra prencher um formulário contínuo de cheques, mas estou ainda com algumas dúvidas, dentre elas é de como posso quebrar a linha onde vai aparecer o extenso do valor do cheque. O valor por extenso está armazenado num campo texto na tabela e fica mais ou menos desse tamanho:Trezentos Reais * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Como faço pra imprimir quebrando em duas linhas utilizando a impressão direta na LPT1, lembrando que às vezes o valor por extenso pode chegar até a segunda linha se o valor for grande como R$ 444.444,44?Outra coisa, fiz alguns testes e aqui quando mando imprimir quando tem mais de um registro não consigo fazer a impressora LX-300 saltar a página do tamanho do cheque (76x221mm), no XP já criei um formulário com esse tamanho mas na hora de selecionar esse como papel padrão da impressora a LX-300 não aceita esse tamanho(não aparece).Como fazer para saltar corretamente no tamanho (da folha) do cheque? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kmkg Postado Outubro 27, 2006 Denunciar Share Postado Outubro 27, 2006 Você tem que enviar os comandos de controle da matricial (comandos Esc/P). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 27, 2006 Denunciar Share Postado Outubro 27, 2006 Como faço pra imprimir quebrando em duas linhas utilizando a impressão direta na LPT1, lembrando que às vezes o valor por extenso pode chegar até a segunda linha se o valor for grande como R$ 444.444,44?A melhor opção é dividir o texto a ser impresso obdecendo a quantidade máxima de caracteres que cabem na linha (observar valor de CPP - caracter por polegadas, normalmente 10cpp ou cpi). Deste modo, você manda as linhas utilizando apenas o Writeln.Outra coisa, fiz alguns testes e aqui quando mando imprimir quando tem mais de um registro não consigo fazer a impressora LX-300 saltar a página do tamanho do cheque (76x221mm), no XP já criei um formulário com esse tamanho mas na hora de selecionar esse como papel padrão da impressora a LX-300 não aceita esse tamanho(não aparece).Como fazer para saltar corretamente no tamanho (da folha) do cheque?Como você está imprimindo diratamente para a impressora, acredito que a formatação que você cria no Windows não se aplica (faz tempo que não utilizo este recurso, posso estar enganado). Neste caso, você terá que controlar a impressão na mão. Uma opção, como sugeriu o colega kmkg, seria enviar a configuração do tamanho de página, para a impressora, utilizando os respectivos comandos ESCAPE (ver manual da impressora); Nesta modalidade, após configurado o tamanho da página, basta enviar um caractere FF (Form Feed - avanço de página = #12). Outra opção, talvez mais simples, pode ser simplesmente controlar o avanço de linha de modo que você manda os caracteres CR+LF (Carrier Return + Line Feed = #13#10) fazendo com que o carro da impressora avance até a próxima folha de cheque - utilizando Writeln resolve isto. Deverá, nesta situação, ser observada quantas linhas (respeitando a configuração de LPP - linhas por polegadas, normalmente 6lpp) que podem ser impressas numa folha de cheque.Ex. Uma folha de cheque tem aproximadamente 3" (polegadas). Com a configuração de LPP igual a 5 linhas, uma folha de cheque teria um total de 15 linhas (altura da sua folha em linhas). Daí para imprimir o texto e avançar para a próxima folha, seria feito algo mais ou menos assim:writeln(ftOutFile, ''); // avança para a 2ª linha writeln(ftOutFile, ''); // avança para a 3ª linha writeln(ftOutFile, 'primeira linha do valor por extenso'); // imprime e avança para a 4ª linha writeln(ftOutFile, 'segunda linha do valor por extenso'); // imprime e avança para a 5ª linha .. writeln(ftOutFile, ''); // avança para a 14ª linha writeln(ftOutFile, ''); // avança para a 15ª linha writeln(ftOutFile, ''); // avança para a 1ª linha da PRÓXIMA folhaAcho que seria mais ou menos isto.[]s Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Clemilson Postado Outubro 27, 2006 Denunciar Share Postado Outubro 27, 2006 Segundo o manual da LX-300+ são esses os comandos:Page format:ESC C, ESC C0, ESC X, ESC N, ESC O, ESC 4Mas não sei como usá-los :blink: no delphi para informar o tamanho do cheque 76mm de altura x 221mm de largura Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kmkg Postado Outubro 27, 2006 Denunciar Share Postado Outubro 27, 2006 Não sei se pelo Writeln na lpt1 você consegue comandar a impressora; se conseguir é só mandar #27 mais o controle. Se não conseguir, neste link tem um exemplo de como enviar os comandos Esc/P. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
simoesluciano
Como imprimir direto na LPT1 via Delphi com Windows XP?
Já usei o código abaixo e não funcionou.
AssignFile(Arquivo, 'LPT1');
Rewrite(Arquivo);
Write(Arquivo, 'TEXTO');
CloseFile(Arquivo);
Obrigado.
Link para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.