Imprimir um Memo no Delphi – Opção 2
Inclua na seção uses: Printers
Já vimos em outra dica como imprimir um memo acessando a
impressora como se fosse um arquivo. Aqui usaremos outra
técnica. Vamos usar o objeto Printer e "desenhar" na
impressora usando Canvas. Esta técnica, dentre outras coisas,
nos permite controlar:
- Salto de página;
- Espaçamento entre linhas;
- Margens, etc.
Veja esta rotina:
procedure ImprimirMemoComCanvas(Memo: TMemo);
const
cEspacoLinha = 5;
cMargemSuperior = 50;
cMargemEsquerda = 30;
var
AlturaLinha, Y, I: integer;
begin
Printer.BeginDoc;
try
{ Usa na impressora a mesma fonte do memo }
Printer.Canvas.Font.Assign(Memo.Font);
AlturaLinha := Printer.Canvas.TextHeight('Tg');
Y := cMargemSuperior;
for I := 0 to Memo.Lines.Count -1 do begin
if Y > Printer.PageHeight then begin
Printer.NewPage;
Y := cMargemSuperior;
end;
Printer.Canvas.TextOut(cMargemEsquerda, Y, Memo.Lines[I]);
Y := Y + AlturaLinha + cEspacoLinha;
end;
finally
Printer.EndDoc;
end;
end;
É um exemplo simples, mas funcional. Para testar chame esta
rotina passando o objeto TMemo como parâmetro. Exemplo:
ImprimirMemoComCanvas(Memo1);
A grande vantagem em usar o objeto Printer é que ele nos dá total liberdade para desenhar na impressora. Podemos, por exemplo, desenhar elipses, retângulos, etc. A principal desvantagem é que o programador precisa trabalhar muito para obter a impressão desejada. Mas às vezes vale a pena!