Como Montar o cupom não fiscal e Imprimir na impressora não fiscal
Olá a todos !
Estou desenvolvendo um sistema de restaurante simples, só que a cliente quer imprimir o relatório de venda na impressora não fiscal (não sei ainda qual modelo e marca comprar).
eu nunca desenvolvi algo parecido alguém pode me ajudar, me falando como faço o layout do cupom e como mando a impressão para a impressora não fiscal.
conto com a colaboração de todos.
Estou desenvolvendo um sistema de restaurante simples, só que a cliente quer imprimir o relatório de venda na impressora não fiscal (não sei ainda qual modelo e marca comprar).
eu nunca desenvolvi algo parecido alguém pode me ajudar, me falando como faço o layout do cupom e como mando a impressão para a impressora não fiscal.
conto com a colaboração de todos.
Josenildo Rosa
Curtidas 0
Melhor post
Jamil Fonseca
17/07/2015
ta ai como fazer pra imprimir em qualquer impressora existente no mercado tanto usb como serial ou paralela vc precisa da unita CharPrinter pode conseguir na internet ou me passe seu email que te envio vou postar ela inteira aqui
procedure TFmImpressao.btnbalcaoClick(Sender: TObject);
var prn:TAdvancedPrinter;
ln, linha1, linha2, linha3, linha4, linha5, linha6, linha7, linha8, linha9, linha10, tamanho: string;
tmdesc:integer;
qtdelinha: currency;
begin
ln := #13 + #10;
SetDefaultPrinter(simpbalcao);
prn := TAdvancedPrinter.Create;
Prn.OpenDoc('CUPOM DE VENDA');
prn.FontSize := pfs10cpi;
Prn.SendData('IP - GOURMET versao 2014================'+ln);
Prn.SendData(dm.EmpresaRazaoSocial.AsString+ln);
Prn.SendData('========================================'+ln);
Prn.SendData('VENDA: '+ dm.VendasCodigo.AsString + ' | ' + DateToStr(date) +' | '+ TimeToStr(time)+ln);
if dm.VendasTipo.AsString = 'MESA' Then
Prn.SendData('COD.MESA: '+ dm.VendasCodMESA.AsString+ln)
else if dm.VendasTipo.AsString = 'ENTREGA' Then
Prn.SendData('COD.ENTREGA: '+ dm.VendasCodMESA.AsString+ln)
else if dm.VendasTipo.AsString = 'BALCAO' Then
Prn.SendData('COD.BALCAO: '+ dm.VendasCodMESA.AsString+ln);
Prn.SendData('TIPO VENDA: '+ dm.VendasTipo.AsString + ' ' + dm.VendasMesa.AsString+ln);
if dm.VendasTipo.AsString = 'BALCAO' then
Prn.SendData('CLIENTE: '+ dm.VendasCliente.AsString+ln);
if dm.VendasTipo.AsString = 'ENTREGA' then
begin
Prn.SendData('CLIENTE: '+ dm.VendasCliente.AsString+ln);
Prn.SendData('TELEFONE: '+ dm.VendasTelefone.AsString+ln);
Prn.SendData('END.: '+ dm.VendasEndereco.AsString+ln);
Prn.SendData('BAIRRO: '+ dm.VendasBairro.AsString+ln);
Prn.SendData('NRO. / COMP.:'+ dm.VendasNumero.AsString + ' | ' + dm.VendasComplemento.AsString+ln);
Prn.SendData('OBS1.:'+ dm.VendasObservacoes.AsString+ln);
Prn.SendData('OBS2.:'+ dm.VendasObsEntrega.AsString+ln);
end;
if dm.VendasTipo.AsString = 'MESA' then
prn.SendData('GARÇOM.: ' + FmTouch.nomegarcom+ln);
Prn.SendData('===================ITENS================'+ln);
relacionamento;
dm.ItensVendas.First;
while not dm.ItensVendas.Eof do
begin
linha1 := '';
linha2 := '';
linha3 := '';
linha4 := '';
linha5 := '';
linha6 := '';
linha7 := '';
linha8 := '';
linha9 := '';
linha10 := '';
tmdesc := Length(dm.ItensVendasDescricaoImpressao.AsString);
qtdelinha := tmdesc / 40;
if qtdelinha<= 1 then
linha1 := dm.ItensVendasDescricaoImpressao.AsString
else if (qtdelinha > 1) and (qtdelinha <=2) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
end
else if (qtdelinha >2) and (qtdelinha <=3) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
end
else if (qtdelinha >3) and (qtdelinha <=4) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
end
else if (qtdelinha >4) and (qtdelinha <=5) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
end
else if (qtdelinha >5) and (qtdelinha <=6) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
end
else if (qtdelinha >6) and (qtdelinha <=7) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
end
else if (qtdelinha >7) and (qtdelinha <=8) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
linha8 := copy(dm.ItensVendasDescricaoImpressao.AsString, 281, 40);
end
else if (qtdelinha >8) and (qtdelinha <=9) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
linha8 := copy(dm.ItensVendasDescricaoImpressao.AsString, 281, 40);
linha9 := copy(dm.ItensVendasDescricaoImpressao.AsString, 321, 40);
end
else if (qtdelinha >8) and (qtdelinha <=9) then
begin
linha
procedure TFmImpressao.btnbalcaoClick(Sender: TObject);
var prn:TAdvancedPrinter;
ln, linha1, linha2, linha3, linha4, linha5, linha6, linha7, linha8, linha9, linha10, tamanho: string;
tmdesc:integer;
qtdelinha: currency;
begin
ln := #13 + #10;
SetDefaultPrinter(simpbalcao);
prn := TAdvancedPrinter.Create;
Prn.OpenDoc('CUPOM DE VENDA');
prn.FontSize := pfs10cpi;
Prn.SendData('IP - GOURMET versao 2014================'+ln);
Prn.SendData(dm.EmpresaRazaoSocial.AsString+ln);
Prn.SendData('========================================'+ln);
Prn.SendData('VENDA: '+ dm.VendasCodigo.AsString + ' | ' + DateToStr(date) +' | '+ TimeToStr(time)+ln);
if dm.VendasTipo.AsString = 'MESA' Then
Prn.SendData('COD.MESA: '+ dm.VendasCodMESA.AsString+ln)
else if dm.VendasTipo.AsString = 'ENTREGA' Then
Prn.SendData('COD.ENTREGA: '+ dm.VendasCodMESA.AsString+ln)
else if dm.VendasTipo.AsString = 'BALCAO' Then
Prn.SendData('COD.BALCAO: '+ dm.VendasCodMESA.AsString+ln);
Prn.SendData('TIPO VENDA: '+ dm.VendasTipo.AsString + ' ' + dm.VendasMesa.AsString+ln);
if dm.VendasTipo.AsString = 'BALCAO' then
Prn.SendData('CLIENTE: '+ dm.VendasCliente.AsString+ln);
if dm.VendasTipo.AsString = 'ENTREGA' then
begin
Prn.SendData('CLIENTE: '+ dm.VendasCliente.AsString+ln);
Prn.SendData('TELEFONE: '+ dm.VendasTelefone.AsString+ln);
Prn.SendData('END.: '+ dm.VendasEndereco.AsString+ln);
Prn.SendData('BAIRRO: '+ dm.VendasBairro.AsString+ln);
Prn.SendData('NRO. / COMP.:'+ dm.VendasNumero.AsString + ' | ' + dm.VendasComplemento.AsString+ln);
Prn.SendData('OBS1.:'+ dm.VendasObservacoes.AsString+ln);
Prn.SendData('OBS2.:'+ dm.VendasObsEntrega.AsString+ln);
end;
if dm.VendasTipo.AsString = 'MESA' then
prn.SendData('GARÇOM.: ' + FmTouch.nomegarcom+ln);
Prn.SendData('===================ITENS================'+ln);
relacionamento;
dm.ItensVendas.First;
while not dm.ItensVendas.Eof do
begin
linha1 := '';
linha2 := '';
linha3 := '';
linha4 := '';
linha5 := '';
linha6 := '';
linha7 := '';
linha8 := '';
linha9 := '';
linha10 := '';
tmdesc := Length(dm.ItensVendasDescricaoImpressao.AsString);
qtdelinha := tmdesc / 40;
if qtdelinha<= 1 then
linha1 := dm.ItensVendasDescricaoImpressao.AsString
else if (qtdelinha > 1) and (qtdelinha <=2) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
end
else if (qtdelinha >2) and (qtdelinha <=3) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
end
else if (qtdelinha >3) and (qtdelinha <=4) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
end
else if (qtdelinha >4) and (qtdelinha <=5) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
end
else if (qtdelinha >5) and (qtdelinha <=6) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
end
else if (qtdelinha >6) and (qtdelinha <=7) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
end
else if (qtdelinha >7) and (qtdelinha <=8) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
linha8 := copy(dm.ItensVendasDescricaoImpressao.AsString, 281, 40);
end
else if (qtdelinha >8) and (qtdelinha <=9) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
linha8 := copy(dm.ItensVendasDescricaoImpressao.AsString, 281, 40);
linha9 := copy(dm.ItensVendasDescricaoImpressao.AsString, 321, 40);
end
else if (qtdelinha >8) and (qtdelinha <=9) then
begin
linha
GOSTEI 1
Mais Respostas
Leonardo Xavier
06/01/2014
Amanhã te trago o meu script que eu fiz com esta função, ja prontinha.
GOSTEI 0
Leonardo Xavier
06/01/2014
Somente uma pergunta qual tipo de impressora você esta utilizando em sua aplicação? Generic/text?
GOSTEI 0
Josenildo Rosa
06/01/2014
O Leonardo desde já agradeço pela ajuda, ainda não defini qual impressora irei usar se voce puder me dar a dica de qual modelo também agradeço, eu estava pensando em usar a Elgin Vox, Daruma DR700 ou Bematech MP-20, mas estou em dúvida .
Detalhe que esqueci de mencionar, uso Delphi 7 e Firebird 2.1
Detalhe que esqueci de mencionar, uso Delphi 7 e Firebird 2.1
Somente uma pergunta qual tipo de impressora você esta utilizando em sua aplicação? Generic/text?
GOSTEI 0
Silvio Morelo
06/01/2014
Eu utilizo as impressoras DIEBOLD e nunca deram problema, posso te passar a procedure que eu utilizo para imprimir.
GOSTEI 0
Josenildo Rosa
06/01/2014
Morelo qualquer ajuda será bem vinda se puder me passar a procedure que faz imprimir eu agradeço.
Eu utilizo as impressoras DIEBOLD e nunca deram problema, posso te passar a procedure que eu utilizo para imprimir.
GOSTEI 0
Josenildo Rosa
06/01/2014
E aí pessoal ninguém vai poder me ajudar ?
GOSTEI 0
Josenildo Rosa
06/01/2014
Leonardo boa noite, Estou aguardando a função que ficou de me enviar.
Amanhã te trago o meu script que eu fiz com esta função, ja prontinha.
GOSTEI 0
Tânia Luiz
06/01/2014
Bom dia, Morelo, poderia me ajudar, tenho uma Diebold, está imprimindo , só que o texto não fica centralizado no cupom, fica à esquerda....sabe como posso resolver?
Obrigada. Tânia
Obrigada. Tânia
GOSTEI 0
Mauricio Rodrigues
06/01/2014
use o writeln 100% nativo delphi
GOSTEI 0
Deivison Melo
06/01/2014
Inclua na seção uses: Printers
Já vimos em outra dica como imprimir um memo acessando a
impressora como se fosse um arquivo. Aqui usaremos outra
técnica. Vamos usar o objeto Printer e "desenhar" na
impressora usando Canvas. Esta técnica, dentre outras coisas,
nos permite controlar:
- Salto de página;
- Espaçamento entre linhas;
- Margens, etc.
Veja esta rotina:
procedure ImprimirMemoComCanvas(Memo: TMemo);
const
cEspacoLinha = 5;
cMargemSuperior = 50;
cMargemEsquerda = 30;
var
AlturaLinha, Y, I: integer;
begin
Printer.BeginDoc;
try
{ Usa na impressora a mesma fonte do memo }
Printer.Canvas.Font.Assign(Memo.Font);
AlturaLinha := Printer.Canvas.TextHeight('Tg');
Y := cMargemSuperior;
for I := 0 to Memo.Lines.Count -1 do begin
if Y > Printer.PageHeight then begin
Printer.NewPage;
Y := cMargemSuperior;
end;
Printer.Canvas.TextOut(cMargemEsquerda, Y, Memo.Lines[I]);
Y := Y + AlturaLinha + cEspacoLinha;
end;
finally
Printer.EndDoc;
end;
end;
É um exemplo simples, mas funcional. Para testar chame esta
rotina passando o objeto TMemo como parâmetro. Exemplo:
ImprimirMemoComCanvas(Memo1);
Observações
A grande vantagem em usar o objeto Printer é que ele nos dá total liberdade para desenhar na impressora. Podemos, por exemplo, desenhar elipses, retângulos, etc. A principal desvantagem é que o programador precisa trabalhar muito para obter a impressão desejada. Mas às vezes vale a pena!
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
Já vimos em outra dica como imprimir um memo acessando a
impressora como se fosse um arquivo. Aqui usaremos outra
técnica. Vamos usar o objeto Printer e "desenhar" na
impressora usando Canvas. Esta técnica, dentre outras coisas,
nos permite controlar:
- Salto de página;
- Espaçamento entre linhas;
- Margens, etc.
Veja esta rotina:
procedure ImprimirMemoComCanvas(Memo: TMemo);
const
cEspacoLinha = 5;
cMargemSuperior = 50;
cMargemEsquerda = 30;
var
AlturaLinha, Y, I: integer;
begin
Printer.BeginDoc;
try
{ Usa na impressora a mesma fonte do memo }
Printer.Canvas.Font.Assign(Memo.Font);
AlturaLinha := Printer.Canvas.TextHeight('Tg');
Y := cMargemSuperior;
for I := 0 to Memo.Lines.Count -1 do begin
if Y > Printer.PageHeight then begin
Printer.NewPage;
Y := cMargemSuperior;
end;
Printer.Canvas.TextOut(cMargemEsquerda, Y, Memo.Lines[I]);
Y := Y + AlturaLinha + cEspacoLinha;
end;
finally
Printer.EndDoc;
end;
end;
É um exemplo simples, mas funcional. Para testar chame esta
rotina passando o objeto TMemo como parâmetro. Exemplo:
ImprimirMemoComCanvas(Memo1);
Observações
A grande vantagem em usar o objeto Printer é que ele nos dá total liberdade para desenhar na impressora. Podemos, por exemplo, desenhar elipses, retângulos, etc. A principal desvantagem é que o programador precisa trabalhar muito para obter a impressão desejada. Mas às vezes vale a pena!
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
GOSTEI 0
Frank Silva
06/01/2014
Boa Noite, Leonardo. Tudo bem? Se puder me passar tb esse script, estou tendo muita dificuldade, comecei agora a programar em Delphi e ainda tenho muitas dificuldades.
Obrigado
Obrigado
GOSTEI 0
Jamil Fonseca
06/01/2014
ta ai como fazer pra imprimir em qualquer impressora existente no mercado tanto usb como serial ou paralela vc precisa da unita CharPrinter pode conseguir na internet ou me passe seu email que te envio vou postar ela inteira aqui
procedure TFmImpressao.btnbalcaoClick(Sender: TObject);
var prn:TAdvancedPrinter;
ln, linha1, linha2, linha3, linha4, linha5, linha6, linha7, linha8, linha9, linha10, tamanho: string;
tmdesc:integer;
qtdelinha: currency;
begin
ln := #13 + #10;
SetDefaultPrinter(simpbalcao);
prn := TAdvancedPrinter.Create;
Prn.OpenDoc('CUPOM DE VENDA');
prn.FontSize := pfs10cpi;
Prn.SendData('IP - GOURMET versao 2014================'+ln);
Prn.SendData(dm.EmpresaRazaoSocial.AsString+ln);
Prn.SendData('========================================'+ln);
Prn.SendData('VENDA: '+ dm.VendasCodigo.AsString + ' | ' + DateToStr(date) +' | '+ TimeToStr(time)+ln);
if dm.VendasTipo.AsString = 'MESA' Then
Prn.SendData('COD.MESA: '+ dm.VendasCodMESA.AsString+ln)
else if dm.VendasTipo.AsString = 'ENTREGA' Then
Prn.SendData('COD.ENTREGA: '+ dm.VendasCodMESA.AsString+ln)
else if dm.VendasTipo.AsString = 'BALCAO' Then
Prn.SendData('COD.BALCAO: '+ dm.VendasCodMESA.AsString+ln);
Prn.SendData('TIPO VENDA: '+ dm.VendasTipo.AsString + ' ' + dm.VendasMesa.AsString+ln);
if dm.VendasTipo.AsString = 'BALCAO' then
Prn.SendData('CLIENTE: '+ dm.VendasCliente.AsString+ln);
if dm.VendasTipo.AsString = 'ENTREGA' then
begin
Prn.SendData('CLIENTE: '+ dm.VendasCliente.AsString+ln);
Prn.SendData('TELEFONE: '+ dm.VendasTelefone.AsString+ln);
Prn.SendData('END.: '+ dm.VendasEndereco.AsString+ln);
Prn.SendData('BAIRRO: '+ dm.VendasBairro.AsString+ln);
Prn.SendData('NRO. / COMP.:'+ dm.VendasNumero.AsString + ' | ' + dm.VendasComplemento.AsString+ln);
Prn.SendData('OBS1.:'+ dm.VendasObservacoes.AsString+ln);
Prn.SendData('OBS2.:'+ dm.VendasObsEntrega.AsString+ln);
end;
if dm.VendasTipo.AsString = 'MESA' then
prn.SendData('GARÇOM.: ' + FmTouch.nomegarcom+ln);
Prn.SendData('===================ITENS================'+ln);
relacionamento;
dm.ItensVendas.First;
while not dm.ItensVendas.Eof do
begin
linha1 := '';
linha2 := '';
linha3 := '';
linha4 := '';
linha5 := '';
linha6 := '';
linha7 := '';
linha8 := '';
linha9 := '';
linha10 := '';
tmdesc := Length(dm.ItensVendasDescricaoImpressao.AsString);
qtdelinha := tmdesc / 40;
if qtdelinha<= 1 then
linha1 := dm.ItensVendasDescricaoImpressao.AsString
else if (qtdelinha > 1) and (qtdelinha <=2) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
end
else if (qtdelinha >2) and (qtdelinha <=3) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
end
else if (qtdelinha >3) and (qtdelinha <=4) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
end
else if (qtdelinha >4) and (qtdelinha <=5) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
end
else if (qtdelinha >5) and (qtdelinha <=6) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
end
else if (qtdelinha >6) and (qtdelinha <=7) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
end
else if (qtdelinha >7) and (qtdelinha <=8) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
linha8 := copy(dm.ItensVendasDescricaoImpressao.AsString, 281, 40);
end
else if (qtdelinha >8) and (qtdelinha <=9) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
linha8 := copy(dm.ItensVendasDescricaoImpressao.AsString, 281, 40);
linha9 := copy(dm.ItensVendasDescricaoImpressao.AsString, 321, 40);
end
else if (qtdelinha >8) and (qtdelinha <=9) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
linha8 := copy(dm.ItensVendasDescricaoImpressao.AsString, 281, 40);
linha9 := copy(dm.ItensVendasDescricaoImpressao.AsString, 321, 40);
linha10 := copy(dm.ItensVendasDescricaoImpressao.AsString, 361, 40);
end;
if dm.ItensVendasEmbalagem.AsInteger = 0 then
tamanho := dm.ItensVendasTm.AsString
else
tamanho := '';
Prn.SendData(FormatCurr('#,###,##0.000', dm.ItensVendasQtde.AsCurrency)+' '+tamanho+' '+FormatCurr('#,###,##0.00', dm.ItensVendasTotal.AsCurrency)+ln);
Prn.SendData(linha1+ln);
if linha2 <> '' then
Prn.SendData(linha2+ln);
if linha3 <> '' then
Prn.SendData(linha3+ln);
if linha4 <> '' then
Prn.SendData(linha4+ln);
if linha5 <> '' then
Prn.SendData(linha5+ln);
if linha6 <> '' then
Prn.SendData(linha6+ln);
if linha7 <> '' then
Prn.SendData(linha7+ln);
if linha8 <> '' then
Prn.SendData(linha8+ln);
if linha9 <> '' then
Prn.SendData(linha9+ln);
if linha10 <> '' then
Prn.SendData(linha10+ln);
if dm.ItensVendasOpcionalExtra.AsString <> '' then
Prn.SendData(dm.ItensVendasOpcionalExtra.AsString +ln);
Prn.SendData('----------------------------------------'+ln);
dm.ItensVendas.Next;
end;
Prn.SendData('SUBTOTAL PEDIDO..: R$ '+ FormatCurr('#,###,##0.00', dm.VendasSubtotal.AsCurrency)+ln);
Prn.SendData('DESCONTO.........: R$ '+ FormatCurr('#,###,##0.00', dm.VendasDesconto.AsCurrency)+ln);
Prn.SendData('TX. ENTREGA......: R$ '+ FormatCurr('#,###,##0.00', dm.VendastxEntrega.AsCurrency)+ln);
if dm.VendastxServico.AsCurrency > 0 then
Prn.SendData('TX. SERVICO......: R$ '+ FormatCurr('#,###,##0.00', dm.VendastxServico.AsCurrency)+ln);
Prn.SendData('TOTAL DO PEDIDO..: R$ '+ FormatCurr('#,###,##0.00', dm.VendasTotal.AsCurrency)+ln);
if dm.VendasNroPessoas.AsInteger > 1 then
Prn.SendData('TOTAL POR PESSOA.: R$ '+ FormatCurr('#,###,##0.00', dm.VendasTotal.AsCurrency / dm.VendasNroPessoas.AsInteger)+ln);
if dm.VendasForma1.AsString <> '' then
Prn.SendData('PGTO.: R$ '+ dm.VendasForma1.AsString + ' ' + FormatCurr('#,###,##0.00', dm.VendasValorForma1.AsCurrency)+ln);
if dm.VendasForma2.AsString <> '' then
Prn.SendData('PGTO.: R$ '+ dm.VendasForma2.AsString + ' ' + FormatCurr('#,###,##0.00', dm.VendasValorForma2.AsCurrency)+ln);
if dm.VendasForma3.AsString <> '' then
Prn.SendData('PGTO.: R$ '+ dm.VendasForma3.AsString + ' ' + FormatCurr('#,###,##0.00', dm.VendasValorForma3.AsCurrency)+ln);
if dm.VendasForma4.AsString <> '' then
Prn.SendData('PGTO.: R$ '+ dm.VendasForma4.AsString + ' ' + FormatCurr('#,###,##0.00', dm.VendasValorForma4.AsCurrency)+ln);
Prn.SendData('TROCO...........: R$ '+ FormatCurr('#,###,##0.00', dm.VendasTroco.AsCurrency)+ln);
Prn.SendData(dm.EmpresaFrase1.AsString+ln);
Prn.SendData(dm.EmpresaFrase2.AsString+ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.CloseDoc;
end;
procedure TFmImpressao.btnbalcaoClick(Sender: TObject);
var prn:TAdvancedPrinter;
ln, linha1, linha2, linha3, linha4, linha5, linha6, linha7, linha8, linha9, linha10, tamanho: string;
tmdesc:integer;
qtdelinha: currency;
begin
ln := #13 + #10;
SetDefaultPrinter(simpbalcao);
prn := TAdvancedPrinter.Create;
Prn.OpenDoc('CUPOM DE VENDA');
prn.FontSize := pfs10cpi;
Prn.SendData('IP - GOURMET versao 2014================'+ln);
Prn.SendData(dm.EmpresaRazaoSocial.AsString+ln);
Prn.SendData('========================================'+ln);
Prn.SendData('VENDA: '+ dm.VendasCodigo.AsString + ' | ' + DateToStr(date) +' | '+ TimeToStr(time)+ln);
if dm.VendasTipo.AsString = 'MESA' Then
Prn.SendData('COD.MESA: '+ dm.VendasCodMESA.AsString+ln)
else if dm.VendasTipo.AsString = 'ENTREGA' Then
Prn.SendData('COD.ENTREGA: '+ dm.VendasCodMESA.AsString+ln)
else if dm.VendasTipo.AsString = 'BALCAO' Then
Prn.SendData('COD.BALCAO: '+ dm.VendasCodMESA.AsString+ln);
Prn.SendData('TIPO VENDA: '+ dm.VendasTipo.AsString + ' ' + dm.VendasMesa.AsString+ln);
if dm.VendasTipo.AsString = 'BALCAO' then
Prn.SendData('CLIENTE: '+ dm.VendasCliente.AsString+ln);
if dm.VendasTipo.AsString = 'ENTREGA' then
begin
Prn.SendData('CLIENTE: '+ dm.VendasCliente.AsString+ln);
Prn.SendData('TELEFONE: '+ dm.VendasTelefone.AsString+ln);
Prn.SendData('END.: '+ dm.VendasEndereco.AsString+ln);
Prn.SendData('BAIRRO: '+ dm.VendasBairro.AsString+ln);
Prn.SendData('NRO. / COMP.:'+ dm.VendasNumero.AsString + ' | ' + dm.VendasComplemento.AsString+ln);
Prn.SendData('OBS1.:'+ dm.VendasObservacoes.AsString+ln);
Prn.SendData('OBS2.:'+ dm.VendasObsEntrega.AsString+ln);
end;
if dm.VendasTipo.AsString = 'MESA' then
prn.SendData('GARÇOM.: ' + FmTouch.nomegarcom+ln);
Prn.SendData('===================ITENS================'+ln);
relacionamento;
dm.ItensVendas.First;
while not dm.ItensVendas.Eof do
begin
linha1 := '';
linha2 := '';
linha3 := '';
linha4 := '';
linha5 := '';
linha6 := '';
linha7 := '';
linha8 := '';
linha9 := '';
linha10 := '';
tmdesc := Length(dm.ItensVendasDescricaoImpressao.AsString);
qtdelinha := tmdesc / 40;
if qtdelinha<= 1 then
linha1 := dm.ItensVendasDescricaoImpressao.AsString
else if (qtdelinha > 1) and (qtdelinha <=2) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
end
else if (qtdelinha >2) and (qtdelinha <=3) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
end
else if (qtdelinha >3) and (qtdelinha <=4) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
end
else if (qtdelinha >4) and (qtdelinha <=5) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
end
else if (qtdelinha >5) and (qtdelinha <=6) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
end
else if (qtdelinha >6) and (qtdelinha <=7) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
end
else if (qtdelinha >7) and (qtdelinha <=8) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
linha8 := copy(dm.ItensVendasDescricaoImpressao.AsString, 281, 40);
end
else if (qtdelinha >8) and (qtdelinha <=9) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
linha8 := copy(dm.ItensVendasDescricaoImpressao.AsString, 281, 40);
linha9 := copy(dm.ItensVendasDescricaoImpressao.AsString, 321, 40);
end
else if (qtdelinha >8) and (qtdelinha <=9) then
begin
linha1 := copy(dm.ItensVendasDescricaoImpressao.AsString, 0, 40);
linha2 := copy(dm.ItensVendasDescricaoImpressao.AsString, 41, 40);
linha3 := copy(dm.ItensVendasDescricaoImpressao.AsString, 81, 40);
linha4 := copy(dm.ItensVendasDescricaoImpressao.AsString, 121, 40);
linha5 := copy(dm.ItensVendasDescricaoImpressao.AsString, 161, 40);
linha6 := copy(dm.ItensVendasDescricaoImpressao.AsString, 201, 40);
linha7 := copy(dm.ItensVendasDescricaoImpressao.AsString, 241, 40);
linha8 := copy(dm.ItensVendasDescricaoImpressao.AsString, 281, 40);
linha9 := copy(dm.ItensVendasDescricaoImpressao.AsString, 321, 40);
linha10 := copy(dm.ItensVendasDescricaoImpressao.AsString, 361, 40);
end;
if dm.ItensVendasEmbalagem.AsInteger = 0 then
tamanho := dm.ItensVendasTm.AsString
else
tamanho := '';
Prn.SendData(FormatCurr('#,###,##0.000', dm.ItensVendasQtde.AsCurrency)+' '+tamanho+' '+FormatCurr('#,###,##0.00', dm.ItensVendasTotal.AsCurrency)+ln);
Prn.SendData(linha1+ln);
if linha2 <> '' then
Prn.SendData(linha2+ln);
if linha3 <> '' then
Prn.SendData(linha3+ln);
if linha4 <> '' then
Prn.SendData(linha4+ln);
if linha5 <> '' then
Prn.SendData(linha5+ln);
if linha6 <> '' then
Prn.SendData(linha6+ln);
if linha7 <> '' then
Prn.SendData(linha7+ln);
if linha8 <> '' then
Prn.SendData(linha8+ln);
if linha9 <> '' then
Prn.SendData(linha9+ln);
if linha10 <> '' then
Prn.SendData(linha10+ln);
if dm.ItensVendasOpcionalExtra.AsString <> '' then
Prn.SendData(dm.ItensVendasOpcionalExtra.AsString +ln);
Prn.SendData('----------------------------------------'+ln);
dm.ItensVendas.Next;
end;
Prn.SendData('SUBTOTAL PEDIDO..: R$ '+ FormatCurr('#,###,##0.00', dm.VendasSubtotal.AsCurrency)+ln);
Prn.SendData('DESCONTO.........: R$ '+ FormatCurr('#,###,##0.00', dm.VendasDesconto.AsCurrency)+ln);
Prn.SendData('TX. ENTREGA......: R$ '+ FormatCurr('#,###,##0.00', dm.VendastxEntrega.AsCurrency)+ln);
if dm.VendastxServico.AsCurrency > 0 then
Prn.SendData('TX. SERVICO......: R$ '+ FormatCurr('#,###,##0.00', dm.VendastxServico.AsCurrency)+ln);
Prn.SendData('TOTAL DO PEDIDO..: R$ '+ FormatCurr('#,###,##0.00', dm.VendasTotal.AsCurrency)+ln);
if dm.VendasNroPessoas.AsInteger > 1 then
Prn.SendData('TOTAL POR PESSOA.: R$ '+ FormatCurr('#,###,##0.00', dm.VendasTotal.AsCurrency / dm.VendasNroPessoas.AsInteger)+ln);
if dm.VendasForma1.AsString <> '' then
Prn.SendData('PGTO.: R$ '+ dm.VendasForma1.AsString + ' ' + FormatCurr('#,###,##0.00', dm.VendasValorForma1.AsCurrency)+ln);
if dm.VendasForma2.AsString <> '' then
Prn.SendData('PGTO.: R$ '+ dm.VendasForma2.AsString + ' ' + FormatCurr('#,###,##0.00', dm.VendasValorForma2.AsCurrency)+ln);
if dm.VendasForma3.AsString <> '' then
Prn.SendData('PGTO.: R$ '+ dm.VendasForma3.AsString + ' ' + FormatCurr('#,###,##0.00', dm.VendasValorForma3.AsCurrency)+ln);
if dm.VendasForma4.AsString <> '' then
Prn.SendData('PGTO.: R$ '+ dm.VendasForma4.AsString + ' ' + FormatCurr('#,###,##0.00', dm.VendasValorForma4.AsCurrency)+ln);
Prn.SendData('TROCO...........: R$ '+ FormatCurr('#,###,##0.00', dm.VendasTroco.AsCurrency)+ln);
Prn.SendData(dm.EmpresaFrase1.AsString+ln);
Prn.SendData(dm.EmpresaFrase2.AsString+ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.SendData(ln);
Prn.CloseDoc;
end;
GOSTEI 0
Jamil Fonseca
06/01/2014
//---------------------------------------------------------------
// CharPrinter.pas - Tratamento de impressoras em modo caractere
//---------------------------------------------------------------
// Autor : Fernando Allen Marques de Oliveira
// Dezembro de 2000.
//
// TPrinterStream : classe derivada de TStream para enviar dados
// diretamente para o spool da impressora sele-
// cionada.
//
// TCharPrinter : Classe base para implementação de impressoras.
// não inclui personalização para nenhuma impres-
// sora específica, envia dados sem formatação.
//
// Modificado em 20/05/2003 - Compatibilização com diretivas padrão do Delphi 7
// Modificado por Jamil Alves Fonseca Outubro de 2011.
unit CharPrinter;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Printers, WinSpool;
type
{ Stream para enviar caracteres à impressora atual }
TPrinterStream = class (TStream)
private
fPrinter : TPrinter;
fHandle : THandle;
fTitle : String;
procedure CreateHandle;
procedure FreeHandle;
public
constructor Create (aPrinter: TPrinter; aTitle : String);
destructor Destroy; override;
function Write (const Buffer; Count : Longint): Longint; override;
property Handle : THandle read fHandle;
end;
TCharPrinter = class(TObject)
private
{ Private declarations }
fStream : TStream;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
constructor Create; virtual;
destructor Destroy; override;
procedure OpenDoc (aTitle : String); virtual;
procedure SendData (aData : String);
procedure CloseDoc; virtual;
property PrintStream : TStream read fStream;
end;
// Definições para TAdvancedPrinter //
TprtLang = (lngEPFX,lngESCP2,lngHPPCL);
TprtFontSize = (pfs5cpi,pfs10cpi,pfs12cpi,pfs17cpi,pfs20cpi);
TprtTextStyle = (psBold,psItalic,psUnderline);
TprtTextStyles = set of TprtTextStyle;
TAdvancedPrinter = class (TCharPrinter)
private
fLang : TprtLang;
fFontSize : TprtFontSize;
fTextStyle : TprtTextStyles;
function GetLang : TprtLang;
function GetFontSize : TprtFontSize;
procedure SetFontSize (size : TprtFontSize);
procedure SetTextStyle (styles : TprtTextStyles);
function GetTextStyle : TprtTextStyles;
procedure UpdateStyle;
procedure Initialize;
function Convert (s : string) : string;
public
procedure CR;
procedure LF; overload;
procedure LF (Lines : integer); overload;
procedure CRLF;
procedure FF;
procedure Write (txt : string);
procedure WriteLeft (txt, fill : string; size : integer);
procedure WriteRight (txt, fill : string; size : integer);
procedure WriteCenter(txt, fill : string; size : integer);
procedure WriteRepeat(txt : string; quant : integer);
procedure SetLang (lang : TprtLang);
published
constructor Create; override;
procedure OpenDoc (aTitle : String); override;
property Language : TprtLang read GetLang write SetLang;
property FontSize : TprtFontSize read GetFontSize write SetFontSize;
property TextStyle : TprtTextStyles read GetTextStyle write SetTextStyle;
end;
procedure Register;
implementation
procedure Register;
begin
{ RegisterComponents('AeF', [TCharPrinter]);}
end;
{ =================== }
{ = TPrinterStream = }
{ =================== }
constructor TPrinterStream.Create (aPrinter : TPrinter; aTitle : String);
begin
inherited Create;
fPrinter := aPrinter;
fTitle := aTitle;
CreateHandle;
end;
destructor TPrinterStream.Destroy;
begin
FreeHandle;
inherited;
end;
procedure TPrinterStream.FreeHandle;
begin
if fHandle <> 0 then
begin
EndPagePrinter (fHandle);
EndDocPrinter (fHandle);
ClosePrinter (Handle);
fHandle := 0;
end;
end;
procedure TPrinterStream.CreateHandle;
type
DOC_INFO_1 = packed record
pDocName : PChar;
pOutputFile : PChar;
pDataType : PChar;
end;
var
aDevice,
aDriver,
aPort : array[0..255] of Char;
aMode : Cardinal;
DocInfo : DOC_INFO_1;
begin
DocInfo.pDocName := nil;
DocInfo.pOutputFile := nil;
DocInfo.pDataType := 'RAW';
FreeHandle;
if fHandle = 0 then
begin
fPrinter.GetPrinter (aDevice, aDriver, aPort, aMode);
if OpenPrinter (aDevice, fHandle, nil)
then begin
DocInfo.pDocName := PChar(fTitle);
if StartDocPrinter (fHandle, 1, @DocInfo) = 0
then begin
ClosePrinter (fHandle);
fHandle := 0;
end else
if not StartPagePrinter (fHandle)
then begin
EndDocPrinter (fHandle);
ClosePrinter (fHandle);
fHandle := 0;
end;
end;
end;
end;
function TPrinterStream.Write (const Buffer; Count : Longint) : Longint;
var
Bytes : Cardinal;
begin
WritePrinter (Handle, @Buffer, Count, Bytes);
Result := Bytes;
end;
{ ================= }
{ = TCharPrinter = }
{ ================= }
constructor TCharPrinter.Create;
begin
inherited Create;
fStream := nil;
end;
destructor TCharPrinter.Destroy;
begin
if fStream <> nil
then fStream.Free;
inherited;
end;
procedure TCharPrinter.OpenDoc (aTitle : String);
begin
if fStream = nil
then fStream := TPrinterStream.Create (Printer, aTitle);
end;
procedure TCharPrinter.CloseDoc;
begin
if fStream <> nil
then begin
fStream.Free;
fStream := nil;
end;
end;
procedure TCharPrinter.SendData (aData : String);
var
Data : array[0..255] of char;
cnt : integer;
begin
for cnt := 0 to length(aData) - 1 do
Data[cnt] := aData[cnt+1];
fStream.Write (Data, length(aData));
end;
{ ===================== }
{ = TAdvancedPrinter = }
{ ===================== }
procedure TAdvancedPrinter.SetLang (lang : TprtLang);
begin
fLang := lang;
end;
function TAdvancedPrinter.GetLang : TprtLang;
begin
result := fLang;
end;
procedure TAdvancedPrinter.SetFontSize (size : TprtFontSize);
begin
fFontSize := size;
UpdateStyle;
end;
function TAdvancedPrinter.GetFontSize : TprtFontSize;
begin
result := fFontSize;
UpdateStyle;
end;
procedure TAdvancedPrinter.SetTextStyle (styles : TprtTextStyles);
begin
fTextStyle := styles;
UpdateStyle;
end;
function TAdvancedPrinter.GetTextStyle : TprtTextStyles;
begin
result := fTextStyle;
UpdateStyle;
end;
procedure TAdvancedPrinter.UpdateStyle;
var
cmd : string;
i : byte;
begin
cmd := '';
case fLang of
lngESCP2, lngEPFX : begin
i := 0;
Case fFontSize of
pfs5cpi : i := 32;
pfs10cpi : i := 0;
pfs12cpi : i := 1;
pfs17cpi : i := 4;
pfs20cpi : i := 5;
end;
if psBold in fTextStyle then i := i + 8;
if psItalic in fTextStyle then i := i + 64;
if psUnderline in fTextStyle then i := i + 128;
cmd := #27'!'+chr(i);
end;
lngHPPCL : begin
Case fFontSize of
pfs5cpi : cmd := #27'(s5H';
pfs10cpi : cmd := #27'(s10H';
pfs12cpi : cmd := #27'(s12H';
pfs17cpi : cmd := #27'(s17H';
pfs20cpi : cmd := #27'(s20H';
end;
if psBold in fTextStyle
then cmd := cmd + #27'(s3B'
else cmd := cmd + #27'(s0B';
if psItalic in fTextStyle
then cmd := cmd + #27'(s1S'
else cmd := cmd + #27'(s0S';
if psUnderline in fTextStyle
then cmd := cmd + #27'&d0D'
else cmd := cmd + #27'&d@';
end;
end;
SendData(cmd);
end;
procedure TAdvancedPrinter.Initialize;
begin
case fLang of
lngEPFX : SendData (#27'@'#27'2'#27'P'#18);
lngESCP2 : SendData (#27'@'#27'O'#27'2'#27'C0'#11#27'!'#0);
lngHPPCL : SendData (#27'E'#27'&l2A'#27'&l0O'#27'&l6D'#27'(s4099T'#27'(s0P'#27'&k0S'#27'(s0S');
end;
end;
function TAdvancedPrinter.Convert (s : string) : string;
const
accent : string = 'ãàáäâèéëêìíïîõòóöôùúüûçÃÀÁÄÂÈÉËÊÌÍÏÎÕÒÓÖÔÙÚÜÛÇ';
noaccent : string = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC';
var
i : integer;
begin
for i := 1 to length(accent) do
While Pos(accent[i],s) > 0 do s[Pos(accent[i],s)] := noaccent[i];
result := s;
end;
constructor TAdvancedPrinter.Create;
begin
inherited Create;
fLang := lngESCP2;
fFontSize := pfs10cpi;
fTextStyle := [];
end;
procedure TAdvancedPrinter.OpenDoc (aTitle : String);
begin
inherited OpenDoc (aTitle);
Initialize;
end;
procedure TAdvancedPrinter.CR;
begin
SendData (#13);
end;
procedure TAdvancedPrinter.LF;
begin
SendData (#10);
end;
procedure TAdvancedPrinter.LF (Lines : integer);
begin
while lines > 0 do begin
SendData(#10); dec(lines);
end;
end;
procedure TAdvancedPrinter.CRLF;
begin
SendData (#13#10);
end;
procedure TAdvancedPrinter.FF;
begin
SendData(#12);
end;
procedure TAdvancedPrinter.Write (txt : string);
begin
txt := Convert (txt);
SendData (txt);
end;
procedure TAdvancedPrinter.WriteLeft (txt, fill : string; size : integer);
begin
txt := Convert(txt);
while Length(txt) < size do txt := txt + fill;
SendData (Copy(txt,1,size));
end;
procedure TAdvancedPrinter.WriteRight (txt, fill : string; size : integer);
begin
txt := Convert(txt);
while Length(txt) < size do txt := fill + txt;
SendData (Copy(txt,Length(txt)-size+1,size));
end;
procedure TAdvancedPrinter.WriteCenter(txt, fill : string; size : integer);
begin
txt := Convert(txt);
while Length(txt) < size do txt := fill + txt + fill;
SendData (Copy(txt,(Length(txt)-size) div 2 + 1,size));
end;
procedure TAdvancedPrinter.WriteRepeat(txt : string; quant : integer);
var
s : string;
begin
s := '';
txt := Convert(txt);
while quant > 0 do begin
s := s + txt;
dec(quant);
end;
SendData (s);
end;
end.
// CharPrinter.pas - Tratamento de impressoras em modo caractere
//---------------------------------------------------------------
// Autor : Fernando Allen Marques de Oliveira
// Dezembro de 2000.
//
// TPrinterStream : classe derivada de TStream para enviar dados
// diretamente para o spool da impressora sele-
// cionada.
//
// TCharPrinter : Classe base para implementação de impressoras.
// não inclui personalização para nenhuma impres-
// sora específica, envia dados sem formatação.
//
// Modificado em 20/05/2003 - Compatibilização com diretivas padrão do Delphi 7
// Modificado por Jamil Alves Fonseca Outubro de 2011.
unit CharPrinter;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Printers, WinSpool;
type
{ Stream para enviar caracteres à impressora atual }
TPrinterStream = class (TStream)
private
fPrinter : TPrinter;
fHandle : THandle;
fTitle : String;
procedure CreateHandle;
procedure FreeHandle;
public
constructor Create (aPrinter: TPrinter; aTitle : String);
destructor Destroy; override;
function Write (const Buffer; Count : Longint): Longint; override;
property Handle : THandle read fHandle;
end;
TCharPrinter = class(TObject)
private
{ Private declarations }
fStream : TStream;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
constructor Create; virtual;
destructor Destroy; override;
procedure OpenDoc (aTitle : String); virtual;
procedure SendData (aData : String);
procedure CloseDoc; virtual;
property PrintStream : TStream read fStream;
end;
// Definições para TAdvancedPrinter //
TprtLang = (lngEPFX,lngESCP2,lngHPPCL);
TprtFontSize = (pfs5cpi,pfs10cpi,pfs12cpi,pfs17cpi,pfs20cpi);
TprtTextStyle = (psBold,psItalic,psUnderline);
TprtTextStyles = set of TprtTextStyle;
TAdvancedPrinter = class (TCharPrinter)
private
fLang : TprtLang;
fFontSize : TprtFontSize;
fTextStyle : TprtTextStyles;
function GetLang : TprtLang;
function GetFontSize : TprtFontSize;
procedure SetFontSize (size : TprtFontSize);
procedure SetTextStyle (styles : TprtTextStyles);
function GetTextStyle : TprtTextStyles;
procedure UpdateStyle;
procedure Initialize;
function Convert (s : string) : string;
public
procedure CR;
procedure LF; overload;
procedure LF (Lines : integer); overload;
procedure CRLF;
procedure FF;
procedure Write (txt : string);
procedure WriteLeft (txt, fill : string; size : integer);
procedure WriteRight (txt, fill : string; size : integer);
procedure WriteCenter(txt, fill : string; size : integer);
procedure WriteRepeat(txt : string; quant : integer);
procedure SetLang (lang : TprtLang);
published
constructor Create; override;
procedure OpenDoc (aTitle : String); override;
property Language : TprtLang read GetLang write SetLang;
property FontSize : TprtFontSize read GetFontSize write SetFontSize;
property TextStyle : TprtTextStyles read GetTextStyle write SetTextStyle;
end;
procedure Register;
implementation
procedure Register;
begin
{ RegisterComponents('AeF', [TCharPrinter]);}
end;
{ =================== }
{ = TPrinterStream = }
{ =================== }
constructor TPrinterStream.Create (aPrinter : TPrinter; aTitle : String);
begin
inherited Create;
fPrinter := aPrinter;
fTitle := aTitle;
CreateHandle;
end;
destructor TPrinterStream.Destroy;
begin
FreeHandle;
inherited;
end;
procedure TPrinterStream.FreeHandle;
begin
if fHandle <> 0 then
begin
EndPagePrinter (fHandle);
EndDocPrinter (fHandle);
ClosePrinter (Handle);
fHandle := 0;
end;
end;
procedure TPrinterStream.CreateHandle;
type
DOC_INFO_1 = packed record
pDocName : PChar;
pOutputFile : PChar;
pDataType : PChar;
end;
var
aDevice,
aDriver,
aPort : array[0..255] of Char;
aMode : Cardinal;
DocInfo : DOC_INFO_1;
begin
DocInfo.pDocName := nil;
DocInfo.pOutputFile := nil;
DocInfo.pDataType := 'RAW';
FreeHandle;
if fHandle = 0 then
begin
fPrinter.GetPrinter (aDevice, aDriver, aPort, aMode);
if OpenPrinter (aDevice, fHandle, nil)
then begin
DocInfo.pDocName := PChar(fTitle);
if StartDocPrinter (fHandle, 1, @DocInfo) = 0
then begin
ClosePrinter (fHandle);
fHandle := 0;
end else
if not StartPagePrinter (fHandle)
then begin
EndDocPrinter (fHandle);
ClosePrinter (fHandle);
fHandle := 0;
end;
end;
end;
end;
function TPrinterStream.Write (const Buffer; Count : Longint) : Longint;
var
Bytes : Cardinal;
begin
WritePrinter (Handle, @Buffer, Count, Bytes);
Result := Bytes;
end;
{ ================= }
{ = TCharPrinter = }
{ ================= }
constructor TCharPrinter.Create;
begin
inherited Create;
fStream := nil;
end;
destructor TCharPrinter.Destroy;
begin
if fStream <> nil
then fStream.Free;
inherited;
end;
procedure TCharPrinter.OpenDoc (aTitle : String);
begin
if fStream = nil
then fStream := TPrinterStream.Create (Printer, aTitle);
end;
procedure TCharPrinter.CloseDoc;
begin
if fStream <> nil
then begin
fStream.Free;
fStream := nil;
end;
end;
procedure TCharPrinter.SendData (aData : String);
var
Data : array[0..255] of char;
cnt : integer;
begin
for cnt := 0 to length(aData) - 1 do
Data[cnt] := aData[cnt+1];
fStream.Write (Data, length(aData));
end;
{ ===================== }
{ = TAdvancedPrinter = }
{ ===================== }
procedure TAdvancedPrinter.SetLang (lang : TprtLang);
begin
fLang := lang;
end;
function TAdvancedPrinter.GetLang : TprtLang;
begin
result := fLang;
end;
procedure TAdvancedPrinter.SetFontSize (size : TprtFontSize);
begin
fFontSize := size;
UpdateStyle;
end;
function TAdvancedPrinter.GetFontSize : TprtFontSize;
begin
result := fFontSize;
UpdateStyle;
end;
procedure TAdvancedPrinter.SetTextStyle (styles : TprtTextStyles);
begin
fTextStyle := styles;
UpdateStyle;
end;
function TAdvancedPrinter.GetTextStyle : TprtTextStyles;
begin
result := fTextStyle;
UpdateStyle;
end;
procedure TAdvancedPrinter.UpdateStyle;
var
cmd : string;
i : byte;
begin
cmd := '';
case fLang of
lngESCP2, lngEPFX : begin
i := 0;
Case fFontSize of
pfs5cpi : i := 32;
pfs10cpi : i := 0;
pfs12cpi : i := 1;
pfs17cpi : i := 4;
pfs20cpi : i := 5;
end;
if psBold in fTextStyle then i := i + 8;
if psItalic in fTextStyle then i := i + 64;
if psUnderline in fTextStyle then i := i + 128;
cmd := #27'!'+chr(i);
end;
lngHPPCL : begin
Case fFontSize of
pfs5cpi : cmd := #27'(s5H';
pfs10cpi : cmd := #27'(s10H';
pfs12cpi : cmd := #27'(s12H';
pfs17cpi : cmd := #27'(s17H';
pfs20cpi : cmd := #27'(s20H';
end;
if psBold in fTextStyle
then cmd := cmd + #27'(s3B'
else cmd := cmd + #27'(s0B';
if psItalic in fTextStyle
then cmd := cmd + #27'(s1S'
else cmd := cmd + #27'(s0S';
if psUnderline in fTextStyle
then cmd := cmd + #27'&d0D'
else cmd := cmd + #27'&d@';
end;
end;
SendData(cmd);
end;
procedure TAdvancedPrinter.Initialize;
begin
case fLang of
lngEPFX : SendData (#27'@'#27'2'#27'P'#18);
lngESCP2 : SendData (#27'@'#27'O'#27'2'#27'C0'#11#27'!'#0);
lngHPPCL : SendData (#27'E'#27'&l2A'#27'&l0O'#27'&l6D'#27'(s4099T'#27'(s0P'#27'&k0S'#27'(s0S');
end;
end;
function TAdvancedPrinter.Convert (s : string) : string;
const
accent : string = 'ãàáäâèéëêìíïîõòóöôùúüûçÃÀÁÄÂÈÉËÊÌÍÏÎÕÒÓÖÔÙÚÜÛÇ';
noaccent : string = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC';
var
i : integer;
begin
for i := 1 to length(accent) do
While Pos(accent[i],s) > 0 do s[Pos(accent[i],s)] := noaccent[i];
result := s;
end;
constructor TAdvancedPrinter.Create;
begin
inherited Create;
fLang := lngESCP2;
fFontSize := pfs10cpi;
fTextStyle := [];
end;
procedure TAdvancedPrinter.OpenDoc (aTitle : String);
begin
inherited OpenDoc (aTitle);
Initialize;
end;
procedure TAdvancedPrinter.CR;
begin
SendData (#13);
end;
procedure TAdvancedPrinter.LF;
begin
SendData (#10);
end;
procedure TAdvancedPrinter.LF (Lines : integer);
begin
while lines > 0 do begin
SendData(#10); dec(lines);
end;
end;
procedure TAdvancedPrinter.CRLF;
begin
SendData (#13#10);
end;
procedure TAdvancedPrinter.FF;
begin
SendData(#12);
end;
procedure TAdvancedPrinter.Write (txt : string);
begin
txt := Convert (txt);
SendData (txt);
end;
procedure TAdvancedPrinter.WriteLeft (txt, fill : string; size : integer);
begin
txt := Convert(txt);
while Length(txt) < size do txt := txt + fill;
SendData (Copy(txt,1,size));
end;
procedure TAdvancedPrinter.WriteRight (txt, fill : string; size : integer);
begin
txt := Convert(txt);
while Length(txt) < size do txt := fill + txt;
SendData (Copy(txt,Length(txt)-size+1,size));
end;
procedure TAdvancedPrinter.WriteCenter(txt, fill : string; size : integer);
begin
txt := Convert(txt);
while Length(txt) < size do txt := fill + txt + fill;
SendData (Copy(txt,(Length(txt)-size) div 2 + 1,size));
end;
procedure TAdvancedPrinter.WriteRepeat(txt : string; quant : integer);
var
s : string;
begin
s := '';
txt := Convert(txt);
while quant > 0 do begin
s := s + txt;
dec(quant);
end;
SendData (s);
end;
end.
GOSTEI 0
Frank Silva
06/01/2014
Obrigado, vou tentar agora.
GOSTEI 0
Lucas Ramos
06/01/2014
Josenildo, pode utilizar como se fosse gravar um arquivo txt passando a porta da impressora como parâmetro, ou no caso de impressoras como Bematech, Daruma utilizar a própria DLL, mas acredito que o trabalho seja maior.
procedure TForm1.Imprimir(pTexto: TStringList);
var
lCont : Integer;
lPorta : String;
lArquivo: TextFile;
begin
lPorta := 'COM1';
AssignFile(lArquivo,lPorta);
Reset(lArquivo);
for lCont := 0 to pTexto.Count - 1 do
WriteLn(lArquivo,pTexto[lCont]);
CloseFile(lArquivo);
end;
GOSTEI 0
Jamil Fonseca
06/01/2014
dessa maneira nao funciona em impressoras usb. eu tenho sistema de restaurantes da maneira acima roda em qualquer impressora
GOSTEI 0
Josenildo Rosa
06/01/2014
Obrigado a todos,
Vou testar cada uma e ver qual melhor irá me atender. Desde já muito obrigado.
Vou testar cada uma e ver qual melhor irá me atender. Desde já muito obrigado.
GOSTEI 0
Leonardo Xavier
06/01/2014
Desculpe a demora em responder este tópico mas estive um pouco ocupado em um projeto grande aqui na empresa o que me fez ter quase tempo integral nele, mas dando uma "fugida" posto aqui o meu codigo para criar cupon nao fiscal em impressora bematech e daruma (ja testado) porta usb - serial. Pode colocar os comandos dentro de um button, ou outro componente que queira utilizar para chamar este procedimento.
var
Valorbase:DOUBLE;
valoricms:DOUBLE;
IMPRESSORA:TextFile;
CONTADOR,I:Integer;
data,arquivo,sline:string;
begin
if Label20.Caption='...' then begin
ShowMessage('Clique em calcular para gerar o troco e Cupom Fiscal.');
end else begin
{envia caractere de controle para comprimir a impressão}
AssignPrn(IMPRESSORA);
Rewrite(IMPRESSORA);
{ Imprime a string "Vendas", alinhado à esquerda"-" dentro de uma área de quarenta caracteres}
Write(Impressora,'=====MAKE Ver.:1.0=====');
{ Imprime a string "5.12", e salta para próxima linha}
WriteLn(Impressora);
{ Salta duas linhas}
{ Imprime a Razão Social, alinhado à esquerda dentro de uma área de 90 caracteres}
Writeln (Impressora,'Atendente:'+frmprincipal.dbtext2.Caption);
{ Imprime a Data de Emissão, baseada na data atual e salta para próxima linha}
Writeln(Impressora,'Data/Hora pagamento: '+DatetimetoStr(now));
{ ---- Impressão dos Dados do Consumidor-----}
{ Salta uma linha}
Writeln(Impressora);
{ Imprime a Razão Social, alinhado à esquerda dentro de uma área de 90 caracteres}
Writeln (Impressora,'Cliente:'+DBText4.caption);
{ Imprime a CGC, alinhado à esquerda dentro de uma área de 30 caracteres}
Writeln(Impressora,' CPF:'+dados.tbl_conscontratocpf_cnpj.Text);
{ Imprime Endereço,alinhado à esquerda"-" dentro de uma área de 70 carcateres}
Writeln(Impressora,' Rua: '+dados.tbl_conscontratorua.Text+','+
dados.tbl_conscontratoncasa.Text);
{Imprime Bairro, dentro de uma área de 35 carcateres}
Writeln(Impressora,' Bairro:'+dados.tbl_conscontratobairro.Text);
{ Imprime a Hora de Saída, baseada na Hora Atual e Salta para próxima Linha}
{ Salta três linhas}
Writeln(Impressora);
{----- Fase de Emissão dos Itens da Nota -----}
{ Zero variáveis}
Valorbase:=0;
valoricms:=0;
{ Move o ponteiro de registro da tabela de Itens para o primeiro}
//Dmdados.TbItens.First;
{ Início do Laço}
Writeln(IMPRESSORA,'==========New Life Net=========');
{ Imprime Código produto}
Writeln(Impressora,'Contrato N.:'+DBText5.caption);
//tipo de pagamento
Writeln(Impressora,'Forma Pagto.:'+DBLookupComboBox1.Text);
{Dados do cheque passado}
Writeln(Impressora,'Titular do Cheque:'+DBEdit1.Text);
Writeln(Impressora,'Banco Emissor:'+DBEdit5.Text);
Writeln(Impressora,'Datado para:'+DBEdit4.Text);
Writeln(Impressora,'Juros Proporcionais (Dias):'+Label77.Caption);
{ Imprime Descrição do produto}
Writeln(Impressora,'Pagamento da Parcela:'+DBText3.caption);
{ Imprime Quantidade Comercializada}
Writeln(Impressora,'Vencimento:'+DBText1.caption);
{ Imprime Preço Unitário produto}
Writeln(Impressora,'Valor da Fatura: R$'+formatfloat('###,###,##0.00',StrToCurr(label80.Caption)));
{ Imprime o valor Total do Item e salta uma linha}
Writeln(Impressora,'Valor pago: R$'+formatfloat('###,###,##0.00',StrToCurr(Edit2.Text)));
{ Soma o valor Base de Cálculo do ICMS}
Valorbase:=StrToCurr(DBEdit3.Text)-StrToCurr(Label80.Caption);
{ Imprime o valor total da Nota e salta uma linha}
if valorbase<=0 then begin
Writeln(Impressora,'Valor restante: R$'+formatfloat('###,###,##0.00',StrToCurr(CurrToStr(Valorbase))));
Writeln(IMPRESSORA,'=============================');
{ laço de Itens}
end else begin
Writeln(Impressora,'Valor Troco: R$'+formatfloat('###,###,##0.00',StrToCurr(
CurrToStr(Valorbase))));
Writeln(IMPRESSORA,'=============================');
{ laço de Itens}
end;
System.Close(Impressora);
end;
{
if FileExists('C:\Make\Temp\'+ReplaceStr(data,'/','.')+'.txt') then begin
Memo3.lines.LoadFromFile('C:\Make\Temp\Cupom.txt');
Memo2.Lines.LoadFromFile('C:\Make\Temp\'+ReplaceStr(data,'/','.')+'.txt');
Memo2.Lines.Append(Memo3.Text);
Memo2.Lines.SaveToFile('C:\Make\Temp\'+ReplaceStr(data,'/','.')+'.txt');
end else begin
FileCreate('C:\Make\Temp\'+ReplaceStr(data,'/','.')+'.txt');
Sleep(50);
Memo3.lines.LoadFromFile('C:\Make\Temp\Cupom.txt');
Memo2.Lines.LoadFromFile('C:\Make\Temp\'+ReplaceStr(data,'/','.')+'.txt');
Memo2.Lines.Append(Memo3.Text);
Memo2.Lines.SaveToFile('C:\Make\Temp\'+ReplaceStr(data,'/','.')+'.txt');
end;
// Writeln(IMPRESSORA ,#10 + #17); //Corte de papel
//Printer.EndDoc;
{Salta o núemro de linhas necessárias para completar o espaço restante de itens}
//end;
end;GOSTEI 0