El problema es que la función Canvas, maneja Pixels y dependiendo de la impresora, incluso de la configuración de una concreta las posiciones varían, es decir puedes configurar la posición del texto a 10 pixels del márgen izquierdo, pero dependiendo de la longitud de lienzo que tenga la impresora en cuestión luego lo trasladas a otra y las medidas no te servirán.
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,Printers;
var
XPixelsParPouce:Integer;
YPixelsParPouce:Integer;
function Millimetres2PixelsX(Millims: integer): integer;
function Millimetres2PixelsY(Millims: integer): integer;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
XPixelsParPouce := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
YPixelsParPouce := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
Millimetres2PixelsY(YPixelsParPouce);
Millimetres2Pixelsx(YPixelsParPouce);
end;
function Millimetres2PixelsX(Millims: integer): integer;
begin
result := Trunc(Millims / (25.4 / XPixelsParPouce));
end;
function Millimetres2PixelsY(Millims: integer): integer;
begin
result := Trunc(Millims / (25.4 / YPixelsParPouce));
end;
end.
Explicación está en francés, pero ahora no tengo tiempo de traducirlo, a ver si a la tarde tengo un rato:
Cita:
Maintenant, si nous voulons travailler en millimètres pour plus de commodités, nous devons transformer nos coordonnées en millimètres. Comme vous le savez certainement, 1 pouce = 25.4 mm, donc 1 mm = 1 / 25.4 pouce. Nous pouvons donc calculer directement:
Puisque nous savons maintenant qu'un pouce réel équivaut à un certain nombre de pixels (XPixelsParPouce), nous pouvons facilement déterminer la valeur d'un pixel en millimètres.
1 pouce = XPixelsParPouce = 25.4 mm ==> 1 pixel = 25.4 / XPixelsParPouce
A partir de là, on peut écrire 2 fonctions simples pour transformer les millimètres que nous connaissons en pixels reconnus par notre imprimante:
Pour obtenir le nombre de pixels par pouce pour l'imrimante, nous écrirons donc:
|
Cita:
Ahora, si queremos trabajar en milímetros para más comodidad, debemos transformar nuestras coordenadas en milímetros. Como ciertamente ya sabéis 1 pulgada = 25,4 mm, por lo tanto 1mm=1 / 25.4 pulgadas. Podemos por lo tanto calcular directamente:
Puesto que ahora sabemos que una pulgada real equivale a un cierto número de pixels (XpixelsParPouce), podemos fácilmente determinar el valor de un pixel en milímetros.
1 Pulgada = XPixelsParPouce = 25.4 mm ==> 1 pixel = 25.4 / XpixelsParPouce.
A partir de aquí podemos crear 2 funciones simples para transformar los milímetros que sabemos que nuestra impresora reconoce en pixels.
Para obtener el número de pixels por pulgada de la impresora escribiremos:
|
Un Saludo.