segunda-feira, 25 de maio de 2009

Como imprimir?(codigo fonte)

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.

Nenhum comentário:

Postar um comentário