sábado, 17 de outubro de 2009

Imprimindo com precisão milimétrica:

{O objeto Canvas que está na classe Printer é uma ferramenta que ajuda muito a imprimir qualquer tipo de dado, seja ele texto ou gráfico. 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 de 1440x720 dpi - 1440 dpi para a horizontal e 720 dpi para a vertical).}

function MMtoPixelX(MM: Integer): LongInt; //Resolução horizontal
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;

function MMtoPixelY(MM: Integer): LongInt; //Resolução vertical
var
mmPointY: Real;
PageSize, OffSetUL: TPoint;
begin
mmPointY:= Printer.PageHeight / GetDeviceCaps(Printer.Handle, VERTSIZE);
Escape(Printer.Handle, GETPRINTINGOFFSET, 0, nil, @OffSetUL);
Escape(Printer.Handle, GETPHYSPAGESIZE, 0, nil, @PageSize);
if MM > 0
then Result:= Round((MM * mmPointY) - OffSetUL.Y);
else Result:= Round(MM * mmPointY);
end;

Nenhum comentário:

Postar um comentário