Ver Mensaje Individual
  #3  
Antiguo 13-01-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Reputación: 10
marcoszorrilla Va por buen camino
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
     { Private declarations }
   public
 
     { Public declarations }
   end;
 
 var
   Form1: TForm1;
 
 implementation
 
 {$R *.DFM}
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 //Obtener los pixels por pulgada del Canvas de la impresora
 XPixelsParPouce := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
 YPixelsParPouce := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
 //Pasarlos a milímetros
 Millimetres2PixelsY(YPixelsParPouce);
 Millimetres2Pixelsx(YPixelsParPouce);
 
 end;
 
 
 //Las Funciones que operan la transformación
 
 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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 13-01-2005 a las 18:21:05.
Responder Con Cita