Detectar o final do papel

Delphi

30/01/2004

Estou montando um relatorio jogando os dados direto na porta da impressora assim:

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

Marcelo Bh

Curtidas 0

Respostas

Tarcisiojr

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

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:
mmLPT.Visible := False;
mmLPT.WordWrap := False;
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:
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
POSTAR