Buscar

Como imprimir com dodigo fonte

Código

Unit animais; {exemplo de impressao com codigo fonte do arquivo exemplo de delphi chamado animais. mostra como aumentar a fonte, mudar a fonte, mudar a grossura da linha, imprimir uma reta, imprimir caracteres e dados}

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DBCtrls, ExtCtrls, Grids, DBGrids, Db, DBTables, ExtDlgs, StdCtrls,printers, ComCtrls, Buttons, Outline, DirOutln;

type
  TForm1 = class(TForm)
  dtanimais: TTable;
  dsanimais: TDataSource;
  DBGrid1: TDBGrid;
  DBNavigator1: TDBNavigator;
  DBImage1: TDBImage;
  Imprime: TBitBtn;
  dtanimaisNAME: TStringField;
  dtanimaisSIZE: TSmallintField;
  dtanimaisWEIGHT: TSmallintField;
  dtanimaisAREA: TStringField;
  dtanimaisBMP: TBlobField;
  procedure ImprimeClick(Sender: TObject);
  procedure FormKeyPress(Sender: TObject; var Key: Char);

  private
  { Private declarations }
  public
  { Public declarations }
end;

var
Form1: TForm1;
pag:integer;
linha:integer;

implementation

{$R *.DFM}

//ESTA PROCEDURE AVALIA A TECLA PRESSIONADA, SE FOR ESC O EVENTO DO FORM FORMKEYPRESS SERÁ ACIONADO E ENTÃO ABORTARÁ A IMPRESSÃO. PARA ISTO VOCÊ PRECISA IR NO EVENTO FORMKEYPRESS DO FORM E CLICAR SOBRE ELE.

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key=VK_ESCAPE) and (Printer.Printing) then
  begin
    Printer.Abort;
    MessageDlg('Impressão abortada', mtInformation, [mbOK],0);
  end;
end;

// ESTA PROCEDURE É O CABEÇALHO DO RELATÓRIO E É CHAMADO NO INICIO DA IMPRESSÃO LOGO APÓS O BEGINDOC.

procedure cabrelat;
begin
  inc(pag,1); // INCREMENTA NA VARIAVEL PAG +1
  printer.canvas.pen.width:=9; {expessura do traco}
  INC(LINHA,80); // INCREMENTA NA VARIAVEL LINHA +80 printer.canvas.textout(3700,LINHA,'PAG: '+INTTOSTR(PAG));
  INC(LINHA,80);
  printer.canvas.moveto(4000,LINHA); {moveto e lineto funcionam como coluna inicial e final}
  printer.canvas.lineto(5,LINHA); {traco da coluna 5 ate a 4000 em pixels, varia de impressora p/impressora}
  INC(LINHA,5);
  printer.canvas.font.size:=14; {tamanho da fonte}
  printer.canvas.textout(3,LINHA,’NOME’); {O PRINTER.CANVAS.TEXTOUT, imprime dados ou caracteres}
  printer.canvas.textout(1400, linha,’TAMANHO’);
  printer.canvas.textout(2300, linha,’PESO’);
  printer.canvas.textout(3100, linha,’AREA’);
  INC(LINHA,120);
  printer.canvas.moveto(4000,LINHA);
  printer.canvas.lineto(5,LINHA);
  INC(LINHA,10);
  printer.canvas.font.size:=12;
end;

// ESTA PROCEDURE É O RODAPÉ DO RELATÓRIO E É CHAMADO NO FINAL DA IMPRESSÃO.

procedure rodape;
begin
  INC(LINHA,80);
  printer.canvas.font.style:=[fsitalic]; {tipos de fonte: fsBold, fsItalic, fsUnderline, fsStrikeOut);}
  printer.canvas.textout(4000,LINHA,'CONTINUA');
  INC(LINHA,80); {font.color := clred;}
  printer.canvas.pen.width:=9; {espessura da linha}
  printer.canvas.moveto(4000,linha);
  printer.canvas.lineto(5,linha);
  printer.canvas.font.style:=[]; {estilo da linha}
  printer.newpage;
  linha:=30;
end;

procedure TForm1.ImprimeClick(Sender: TObject);

VAR
nnumero: integer;
begin
  {dtanimais.setkey;}
  cancela.visible:=true;
  {torna visivel o botao de cancelar no form}
  form1.refresh;
  {faz o form mostrar o botao cancela, sem o refresh nao adianta colocar o botao de cancela visivel}
  nnumero:=0;
  pag:=0;
  linha:=30;
  printer.begindoc; {inicializa a impressora}
  CABRELAT;
  dtanimais.first;
  while not (dtanimais.eof) do
  begin
    printer.canvas.textout(3, linha,dtanimaisname.text);// IMPRIME OS CAMPOS DO ARQUIVO
    printer.canvas.textout(1800, linha,dtanimaissize.text); {campo size}
    printer.canvas.textout(2500, linha,dtanimaisweight.text);{campo weight}
    printer.canvas.textout(3100, linha,dtanimaisarea.text); {campo area}
    inc(linha,120); { o inc() incrementa pixels e aqui esta incrementando 120}{ entre um registro e outro}
    dtanimais.next; {pula registro}
    application.processmessages; {Sem isso nao adianta clicar no botao cancela}
    if not printer.printing then {caso tenha abortado a impressao num click}
    {o printer ja nao estara imprimindo, entao entrara aqui}
    exit;
    inc(nnumero,1);
    if linha>=3400 then
    BEGIN
      RODAPE;
      CABRELAT;
    END;
    if dtanimais.eof then
    begin
      printer.canvas.pen.width:=9;
      INC(LINHA,80);
      printer.canvas.moveto(4000,LINHA);
      printer.canvas.lineto(5,LINHA);
      INC(LINHA,60);
      printer.canvas.font.name:='arial';
      printer.canvas.font.size:=10;
      printer.canvas.textout(5,linha,'TOTAL DE ANIMAIS:');
      printer.canvas.textout(1000,linha,INTTOSTR(NNUMERO));
      INC(LINHA,100);
      printer.canvas.moveto(4000,LINHA);
      printer.canvas.lineto(5,LINHA);
      printer.canvas.font.size:=14;
      printer.enddoc;
    end;
  end;
  if printer.printing then
  printer.enddoc;
  dtanimais.first; {retorno ao inicio da tabela}
end;
end.
   

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Impressão
Adicionada dia: 25/11/04
Por: Diego De Souza
Visualizada: 2327 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009