Detectar o final do papel
Estou montando um relatorio jogando os dados direto na porta da impressora assim:
Código:
O problema é o seguinte quando o papel termina a impressora continua imprimindo eu quero que ela de espaço e comece a imprimir no começo da outra folha do formulario continuo ....
Alguem tem a solução para isto?
Código:
procedure TForm1.Button1Click(Sender: TObject); var imp : TextFile; begin AssignFile( imp, ´lpt1´ ); Rewrite( imp ); Write( imp ); Writeln( imp, ´RELAÇÃO DE CLIENTES´ ); Writeln( imp ); Writeln( imp ); Writeln( imp ); with Query1 do begin Close; Open; end; Query1.First; while not ( Query1.Eof ) do begin Writeln( imp, format( ´¬5s´, [ Query1NmRazao.AsString ] ) ); Query1.Next; end; Writeln( imp, ´final da impressao´ ); CloseFile( imp ); end;
O problema é o seguinte quando o papel termina a impressora continua imprimindo eu quero que ela de espaço e comece a imprimir no começo da outra folha do formulario continuo ....
Alguem tem a solução para isto?
Marcelo Bh
Curtidas 0
Respostas
Tarcisiojr
30/01/2004
muito simples vc imprimir uma folha com todas as linhas possiveis e depois conte quantas linhas cabe em uma folha normal de matricial ai vc todo sistema de relatorio q fizer vai ter q controla isso ai! tipo uma variavel de controle de linha via ambiente variavel global. vLinha qualquer... eu fiz assim deu certo.
GOSTEI 0
Ildefonso
30/01/2004
Olá, Tarcisio.
Logiacamente, antes de tudo, você deve saber quantas linhas serão impressas em cada folha, consequentemente, quantas linhas devem ser puladas para o início do cabeçalho seguinte...
Minha dica é a seguinte:
[list:12f8de537c][*:12f8de537c]Coloque um TMemo (de o nome de mmLPT, por exemplo), em um cantinho de seu formulário de impressão;
ele não precisa ser grande, será usado para pegar uma prévia de sua impressão...
[*:12f8de537c]Configure as seguintes propriedades:Isso impedirá que o usuário veja o componente e que, mais imortante, não haja quebras das linhas que você irá inserir ali.
[*:12f8de537c]Agora, crie um ciclo que verifica o conteúdo em linhas e copia os dados para o componente: mmLPT.Add(<texto>)[/list:u:12f8de537c]
Aproveitando seu código:
Bom trabalho. 8)
Logiacamente, antes de tudo, você deve saber quantas linhas serão impressas em cada folha, consequentemente, quantas linhas devem ser puladas para o início do cabeçalho seguinte...
Minha dica é a seguinte:
[list:12f8de537c][*:12f8de537c]Coloque um TMemo (de o nome de mmLPT, por exemplo), em um cantinho de seu formulário de impressão;
ele não precisa ser grande, será usado para pegar uma prévia de sua impressão...
[*:12f8de537c]Configure as seguintes propriedades:
mmLPT.Visible := False; mmLPT.WordWrap := False;
[*:12f8de537c]Agora, crie um ciclo que verifica o conteúdo em linhas e copia os dados para o componente: mmLPT.Add(<texto>)[/list:u:12f8de537c]
Aproveitando seu código:
procedure TForm1.Button1Click(Sender: TObject); var imp : TextFile; linha: Integer; const MAX_LINHAS = 63; // considerando uma folha com 66 linhas PULOS = #131013101310; // três linhas de margem begin AssignFile( imp, ´LPT1´ ); Rewrite( imp ); Write( imp ); with Query1 do begin Close; Open; First; end; mmLPT.WordWrap := False; mmLPT.Lines.Clear; // zera o memorando while not ( Query1.Eof ) do begin if (mmLPT.Lines.Count = 0) then begin mmLPT.Lines.Add(PULOS); mmLPT.Lines.Add(´RELAÇÃO DE CLIENTES´); mmLPT.Lines.Add(´´); mmLPT.Lines.Add(´´); end; // acrescentando... mmLPT.Lines.Add( format( ´¬5s´, [ Query1NmRazao.AsString ] ) ); if (mmLPT.Lines.Count >= MAX_LINHAS) then begin mmLPT.Lines.Add(PULOS); Writeln( imp, mmLPT.Text ); // imprime todas as linhas da página! mmLPT.Lines.Clear; end; Query1.Next; end; Writeln( imp, ´final da impressao´ ); mmLPT.Lines.Clear; CloseFile( imp ); end;
Bom trabalho. 8)
GOSTEI 0