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;
Read the rest of this entry »