Escolar Documentos
Profissional Documentos
Cultura Documentos
parte 2
Imprimindo um bitmap utilizando TPrinter
{ Usando comandos da impressora podemos fazer isto de uma forma bastante simples.
Quando enviamos o caractere ASCII número 8 (oito) para a impressora, a cabeça de
impressão retrocede uma posição, pois este caractere é o BackSpace. Então podemos
imprimir a letra sem acento e, sem seguida, voltar e imprimir o acento desejado.
Vejamos um exemplo:
Usando este recurso, a acentuação não fica excelente, mas melhora bastante.
O objeto Canvas que está na classe Printer é uma ferramenta que ajuda muito a
imprimir qualquer tipo de dados, sejam eles texto ou gráficos. O problema é que a
largura e a altura são determinadas em pixels, e esses valores variam de acordo com a
resolução da impressora. Para converter de milímetros para pixels, use as funções
abaixo, sendo que MMtoPixelX é para a resolução horizontal e MMtoPixelY é para a
resolução vertical (porque na impressora é possível uma resolução como 1440x720 dpi
- 1440 dpi para a horizontal e 720 dpi para a vertical, por exemplo):
function MMtoPixelX (MM : Integer) : Longint;
var
mmPointX : Real;
PageSize, OffSetUL : TPoint;
begin
mmPointX := Printer.PageWidth / GetDeviceCaps(Printer.Handle,HORZSIZE);
Escape (Printer.Handle,GETPRINTINGOFFSET,0,nil,@OffSetUL);
Escape (Printer.Handle,GETPHYSPAGESIZE,0,nil,@PageSize);
if MM > 0 then
Result := round ((MM * mmPointX) - OffSetUL.X)
else
Result := round (MM * mmPointX);
end;
Imprimir em impressora matricial em modo caracter
WinExec('NotePad.exe /p c:\FileName.txt', 0)
Imprimindo Forms
PrintForm
uses
Windows, SysUtils, Printers, Forms, Graphics, Controls, Classes;
.
.
.
procedure PrintForm(frm: TForm);
var
bmp: TBitMap;
x, y, WDPI, HDPI: Integer;
OldColor: TColor;
begin
Screen.Cursor := crHourGlass;
OldColor := frm.Color;
frm.Color := clWhite;
frm.Update;
bmp := frm.GetFormImage;
with Printer do
begin
Orientation := poLandscape;
BeginDoc;
HDPI := PageHeight div 8;
WDPI := PageWidth div 8;
x := PageWidth - Round(WDPI * 0.4); {0.4" margem direita}
y := PageHeight - Round(HDPI * 0.5); {0.5" Altura do rodapé}
Canvas.StretchDraw(Rect(0, 0, x, y), bmp);
EndDoc;
end;
bmp.Free;
frm.Color := OldColor;
Screen.Cursor := crDefault;
end;