Delphi: Várias dicas de impressão pelo TPrinter

0

Posted on : 19-07-2009 | By : Paulo H Oliveira | In : Delphi
if PrintDialog1.Execute then begin
vPrinterLinha := 0;
vFormulario := 66;
Canvas.Font.Name := ‘Courier New’;
Canvas.Font.Size := 8;
Printer.BeginDoc;
with Printer do begin
vPrinterLinha := 1;
vAltura := Canvas.TextHeight(‘A’);
cdsRel.Last;
cdsRel.First;
try
for vI := 1 to cdsRel.RecordCount do begin
vString := cdsRel.Fieldbyname(‘LinRel’).Value;
Canvas.TextOut(0, (vI – 1) * vAltura, vString);
inc(vPrinterLinha);
cdsRel.Next;
if vPrinterLinha > vFormulario – 3 then begin
Printer.NewPage;
vPrinterLinha := 1
end;
end;
finally
EndDoc;
end;
end;
end;
———————————————————————
Impressão com o TPrinter ( Via gerenciador de impressão)
Delphi
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Linha:integer;
Tamanho:integer;
Coluna:integer;
begin
Printer.Orientation := poLandscape;
Printer.BeginDoc;
Printer.Canvas.Pen.Width := 5;
Printer.Canvas.Font.Name := ‘Times New Roman’;
Printer.Canvas.Font.Size := 10;
Linha := 20;
Coluna:= 20;
Tamanho := Printer.Canvas.TextWidth(‘a’);
Table1.First;
while not Table1.Eof do
begin
if Linha = 20 then
begin
Coluna := 20;
Printer.Canvas.TextOut(0,Linha,’Relação de Clientes’);
Linha := Linha – Printer.Canvas.Font.Height + 5 ;
Printer.Canvas.TextOut(Coluna,Linha,’Cod’);
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,’Nome’);
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,’Endereço’);
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha – Printer.Canvas.Font.Height + 5 ;
end;
Coluna := 20 ;
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘Codigo’).AsString);
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘Nome’).AsString);
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘End’).AsString);
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha – Printer.Canvas.Font.Height + 5 ;
Table1.Next;
if Linha > Printer.PageHeight-20 then
Begin
Printer.NewPage;
Linha := 20;
end;
end;
Printer.EndDoc;
end;
———————————————————————-
procedure TFOrcamento.ImprimirClick(Sender: TObject);
Var
Linha, Coluna, Quantidade : Integer;
IndiceHorizontal, IndiceVertical, Total, TotalGeral : Real;
Codigo : String;
Begin
With IBQimprime do
begin
close;
sql.Clear;
sql.Add(‘ Select orcamento.*, orcamentodet.*, empresa.fantasia, empresa.fone, atendente.nome ‘ +
‘ from orcamento ‘ +
‘ left join orcamentodet on orcamento.id = orcamentodet.idorcamento ‘+
‘ left join empresa on orcamento.idempresa = empresa.id ‘ +
‘ left join atendente on orcamento.idatendente = atendente.id ‘+
‘ where orcamento.id = ‘ + QuotedStr(DBEdit2.Text));
open;
end;
Imprimir.Enabled := False;
Cursor := crHourGlass;
IndiceHorizontal := Printer.PageWidth / 960;
IndiceVertical := Printer.PageHeight / 792;
Printer.canvas.font.Name := ‘Arial’;
Printer.Orientation := poPortrait;
Printer.BeginDoc;
Linha := 0;
Quantidade := 0;
TotalGeral := 0;
With IBQimprime do
Begin
First;
While not eof do // para imprimir toda a tabela
Begin
With Printer.Canvas do
Begin
If Linha = 0 then
Begin
Printer.canvas.font.Name := ‘Monotype Corsiva’;
Printer.canvas.font.style:=[fsitalic];
Font.Size := 20;
Coluna := Round(15 * IndiceHorizontal);
TextOut(Coluna, Linha, IBQimprimeFANTASIA.text);
Coluna := Round(720 * IndiceHorizontal);
TextOut(Coluna, Linha, DateToStr(Now));
Linha := Linha + Round(23 * IndiceVertical);
Coluna := Round(250 * IndiceHorizontal);
Printer.canvas.font.Name := ‘Arial’;
Printer.canvas.font.style:=[];
Font.Size := 20;
TextOut(Coluna, Linha, ‘Emissao do Orçamento ‘);
Linha := Linha + Round(28 * IndiceVertical);
Font.Size := 9;
Coluna := 0;
TextOut(Coluna, Linha, ‘CÓDIGO’);
Coluna := Round(90 * IndiceHorizontal);
TextOut(Coluna, Linha, ‘QUANT’);
Coluna := Round(170 * IndiceHorizontal);
TextOut(Coluna, Linha, ‘VALOR’);
Linha := Linha + (Round(25 * IndiceVertical));
End;
Coluna := 0;
Codigo := IntToStr(IBQimprimeIDPRODUTO.Value);
TextOut(Coluna, Linha, Codigo);
Coluna := Round(90 * IndiceHorizontal);
TextOut(Coluna, Linha, floattostr(IBQimprimeQTDE.Value));
Total := IBQimprimeTOTAL1.Value;
TotalGeral := TotalGeral + Total;
Quantidade := Quantidade + 1;
Coluna := Round(170 * IndiceHorizontal);
TextOut(Coluna, Linha, FloatToStrF(Total, ffFixed, 10, 2));
Linha := Linha + Round(20 * IndiceVertical);
If Linha >= 600 then
Begin
Linha := 0;
Printer.NewPage;
End;
End;
IBQimprime.Next;
End;
End;
Printer.Canvas.Font.Size := 10;
Linha := Linha + Round(25 * IndiceVertical);
If Linha > 600 then
Printer.NewPage;
Coluna := 0;
Printer.Canvas.TextOut(Coluna, Linha, ‘QUANTIDADE TOTAL DE ÍTENS: ‘ + IntToStr(Quantidade));
Linha := Linha + Round(25 * IndiceVertical);
Printer.Canvas.TextOut(Coluna, Linha, ‘VALOR TOTAL: ‘ + FloatToStrF(TotalGeral, ffCurrency, 10, 2));
Printer.EndDoc;
Cursor := crDefault;
———————————————————————–
implementation
Uses Printers;
{$R *.DFM}
procedure TForm1.BtnScanPrintersClick(Sender: TObject);
begin
if Printer.PrinterIndex = -1 then
ShowMessage(‘Não há impressoras instaladas.’);
ListBox1.Items := Printer.Printers;
ListBox1.ItemIndex := Printer.PrinterIndex;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
I, Linha, HeightLine: Integer;
begin
Memo2.Lines.Clear;
// Zera a variável
Linha := 0;
// Verifica se tem alguma impressora instalada
if Printer.PrinterIndex = -1 then
Exit;
try
With Printer do
begin
if ListBox1.ItemIndex = -1 then
begin
ShowMessage(‘Lista de impressoras não disponível.’);
Exit;
end;
PrinterIndex := ListBox1.ItemIndex;
Printer.Title := ‘Impressão de Teste’;
BeginDoc;
Memo2.Lines.Add(‘Imprimindo…’);
// Calcula a altura da linha
HeightLine := Trunc(Printer.Canvas.TextHeight(‘My’)*1.1);
for I := 0 to Memo1.Lines.Count -1 do
begin
Canvas.TextOut(50, Linha, Memo1.Lines[I]);
// Calcula a altura da próxima linha
Linha := Linha + HeightLine;
// Se passou do final da página
if Linha >= Printer.PageHeight then
begin
Printer.NewPage;
Linha := 0;
end;
end;
// Termina Impressão
EndDoc;
Memo2.Lines.Add(‘Impressão finalizada com sucesso.’);
end;
except
ShowMessage(‘Erro ao tentar imprimir ou impressora não disponivel.’);
Memo2.Lines.Add(‘Impressão finalizada com erro.’);
end;
end;
————————————————————————
uses Printers;
begin
Printer.BeginDoc;
Printer.Canvas.TextOut(iColuna, iLinha, ‘texto a ser exibido’);
Printer.EndDoc;
end;

if PrintDialog1.Execute then begin

vPrinterLinha := 0;

vFormulario := 66;

Canvas.Font.Name := ‘Courier New’;

Canvas.Font.Size := 8;

Printer.BeginDoc;

with Printer do begin

vPrinterLinha := 1;

vAltura := Canvas.TextHeight(‘A’);

cdsRel.Last;

cdsRel.First;

try

for vI := 1 to cdsRel.RecordCount do begin

vString := cdsRel.Fieldbyname(‘LinRel’).Value;

Canvas.TextOut(0, (vI – 1) * vAltura, vString);

inc(vPrinterLinha);

cdsRel.Next;

if vPrinterLinha > vFormulario – 3 then begin

Printer.NewPage;

vPrinterLinha := 1

end;

end;

finally

EndDoc;

end;

end;

end;

———————————————————————

Impressão com o TPrinter ( Via gerenciador de impressão)

Delphi

procedure TForm1.BitBtn1Click(Sender: TObject);

var

Linha:integer;

Tamanho:integer;

Coluna:integer;

begin

Printer.Orientation := poLandscape;

Printer.BeginDoc;

Printer.Canvas.Pen.Width := 5;

Printer.Canvas.Font.Name := ‘Times New Roman’;

Printer.Canvas.Font.Size := 10;

Linha := 20;

Coluna:= 20;

Tamanho := Printer.Canvas.TextWidth(‘a’);

Table1.First;

while not Table1.Eof do

begin

if Linha = 20 then

begin

Coluna := 20;

Printer.Canvas.TextOut(0,Linha,’Relação de Clientes’);

Linha := Linha – Printer.Canvas.Font.Height + 5 ;

Printer.Canvas.TextOut(Coluna,Linha,’Cod’);

Coluna:= Coluna + (Tamanho * 5 );

Printer.Canvas.TextOut(Coluna,Linha,’Nome’);

Coluna:= Coluna + (Tamanho * 30);

Printer.Canvas.TextOut(Coluna,Linha,’Endereço’);

Coluna:= Coluna + (Tamanho * 30);

Linha := Linha – Printer.Canvas.Font.Height + 5 ;

end;

Coluna := 20 ;

Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘Codigo’).AsString);

Coluna:= Coluna + (Tamanho * 5 );

Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘Nome’).AsString);

Coluna:= Coluna + (Tamanho * 30);

Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘End’).AsString);

Coluna:= Coluna + (Tamanho * 30);

Linha := Linha – Printer.Canvas.Font.Height + 5 ;

Table1.Next;

if Linha > Printer.PageHeight-20 then

Begin

Printer.NewPage;

Linha := 20;

end;

end;

Printer.EndDoc;

end;

———————————————————————-

procedure TFOrcamento.ImprimirClick(Sender: TObject);

Var

Linha, Coluna, Quantidade : Integer;

IndiceHorizontal, IndiceVertical, Total, TotalGeral : Real;

Codigo : String;

Begin

With IBQimprime do

begin

close;

sql.Clear;

sql.Add(‘ Select orcamento.*, orcamentodet.*, empresa.fantasia, empresa.fone, atendente.nome ‘ +

‘ from orcamento ‘ +

‘ left join orcamentodet on orcamento.id = orcamentodet.idorcamento ‘+

‘ left join empresa on orcamento.idempresa = empresa.id ‘ +

‘ left join atendente on orcamento.idatendente = atendente.id ‘+

‘ where orcamento.id = ‘ + QuotedStr(DBEdit2.Text));

open;

end;

Imprimir.Enabled := False;

Cursor := crHourGlass;

IndiceHorizontal := Printer.PageWidth / 960;

IndiceVertical := Printer.PageHeight / 792;

Printer.canvas.font.Name := ‘Arial’;

Printer.Orientation := poPortrait;

Printer.BeginDoc;

Linha := 0;

Quantidade := 0;

TotalGeral := 0;

With IBQimprime do

Begin

First;

While not eof do // para imprimir toda a tabela

Begin

With Printer.Canvas do

Begin

If Linha = 0 then

Begin

Printer.canvas.font.Name := ‘Monotype Corsiva’;

Printer.canvas.font.style:=[fsitalic];

Font.Size := 20;

Coluna := Round(15 * IndiceHorizontal);

TextOut(Coluna, Linha, IBQimprimeFANTASIA.text);

Coluna := Round(720 * IndiceHorizontal);

TextOut(Coluna, Linha, DateToStr(Now));

Linha := Linha + Round(23 * IndiceVertical);

Coluna := Round(250 * IndiceHorizontal);

Printer.canvas.font.Name := ‘Arial’;

Printer.canvas.font.style:=[];

Font.Size := 20;

TextOut(Coluna, Linha, ‘Emissao do Orçamento ‘);

Linha := Linha + Round(28 * IndiceVertical);

Font.Size := 9;

Coluna := 0;

TextOut(Coluna, Linha, ‘CÓDIGO’);

Coluna := Round(90 * IndiceHorizontal);

TextOut(Coluna, Linha, ‘QUANT’);

Coluna := Round(170 * IndiceHorizontal);

TextOut(Coluna, Linha, ‘VALOR’);

Linha := Linha + (Round(25 * IndiceVertical));

End;

Coluna := 0;

Codigo := IntToStr(IBQimprimeIDPRODUTO.Value);

TextOut(Coluna, Linha, Codigo);

Coluna := Round(90 * IndiceHorizontal);

TextOut(Coluna, Linha, floattostr(IBQimprimeQTDE.Value));

Total := IBQimprimeTOTAL1.Value;

TotalGeral := TotalGeral + Total;

Quantidade := Quantidade + 1;

Coluna := Round(170 * IndiceHorizontal);

TextOut(Coluna, Linha, FloatToStrF(Total, ffFixed, 10, 2));

Linha := Linha + Round(20 * IndiceVertical);

If Linha >= 600 then

Begin

Linha := 0;

Printer.NewPage;

End;

End;

IBQimprime.Next;

End;

End;

Printer.Canvas.Font.Size := 10;

Linha := Linha + Round(25 * IndiceVertical);

If Linha > 600 then

Printer.NewPage;

Coluna := 0;

Printer.Canvas.TextOut(Coluna, Linha, ‘QUANTIDADE TOTAL DE ÍTENS: ‘ + IntToStr(Quantidade));

Linha := Linha + Round(25 * IndiceVertical);

Printer.Canvas.TextOut(Coluna, Linha, ‘VALOR TOTAL: ‘ + FloatToStrF(TotalGeral, ffCurrency, 10, 2));

Printer.EndDoc;

Cursor := crDefault;

———————————————————————–

implementation

Uses Printers;

{$R *.DFM}

procedure TForm1.BtnScanPrintersClick(Sender: TObject);

begin

if Printer.PrinterIndex = -1 then

ShowMessage(‘Não há impressoras instaladas.’);

ListBox1.Items := Printer.Printers;

ListBox1.ItemIndex := Printer.PrinterIndex;

end;

procedure TForm1.Button1Click(Sender: TObject);

Var

I, Linha, HeightLine: Integer;

begin

Memo2.Lines.Clear;

// Zera a variável

Linha := 0;

// Verifica se tem alguma impressora instalada

if Printer.PrinterIndex = -1 then

Exit;

try

With Printer do

begin

if ListBox1.ItemIndex = -1 then

begin

ShowMessage(‘Lista de impressoras não disponível.’);

Exit;

end;

PrinterIndex := ListBox1.ItemIndex;

Printer.Title := ‘Impressão de Teste’;

BeginDoc;

Memo2.Lines.Add(‘Imprimindo…’);

// Calcula a altura da linha

HeightLine := Trunc(Printer.Canvas.TextHeight(‘My’)*1.1);

for I := 0 to Memo1.Lines.Count -1 do

begin

Canvas.TextOut(50, Linha, Memo1.Lines[I]);

// Calcula a altura da próxima linha

Linha := Linha + HeightLine;

// Se passou do final da página

if Linha >= Printer.PageHeight then

begin

Printer.NewPage;

Linha := 0;

end;

end;

// Termina Impressão

EndDoc;

Memo2.Lines.Add(‘Impressão finalizada com sucesso.’);

end;

except

ShowMessage(‘Erro ao tentar imprimir ou impressora não disponivel.’);

Memo2.Lines.Add(‘Impressão finalizada com erro.’);

end;

end;

————————————————————————

uses Printers;

begin

Printer.BeginDoc;

Printer.Canvas.TextOut(iColuna, iLinha, ‘texto a ser exibido’);

Printer.EndDoc;

end;

Compartilhe :

  • Stumble upon
  • twitter

Escreva um comentário