Wojtysz1 podał dwie ciekawe funkcje do drukowania w Delphi w milimetrach : MM_na_DPI i DPI_na_MM. Na ich podstawie napisałem funkcje CoordX(mm) i CoordY(mm), które oprócz zamiany z milimetrów na DPI uwzględniają
sprzętowe marginesy drukarki. Np. żeby wydrukować tekst 10 mm od lewego brzegu kartki i 50 mm od górnego brzegu, wystarczy wykonać instrukcję

TextOut(CoordX(10),CoordY(50), 'To jest napis');

i nie trzeba się kłopotać o lewy i górny margines. Różne drukarki mają różne marginesy i rozdzielczości - obie funkcje potrafią je uwzględnić. Funkcje są szczególnie przydatne przy projektowaniu wydruku. W wersji, którą podaję zakładam , że rozdzielczość pozioma i pionowa są takie same. Nad tym, co zrobić, gdy są różne muszę się dopiero zastanowić .Chodzi przede wszystkim o orientację Landscape, w Portrait wszystko działa poprawnie. Gdy rozdzielczości są równe nie ma problemu w obu orientacjach.

Podaję treść stosownego unitu - może komuś się przyda:

unit Utils_MD;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils,
  System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  Vcl.ComCtrls, Vcl.Printers;

function MM_na_DPI(mm:single):integer; // 
function DPI_na_MM(dots:integer):single;//
function CoordX(mm:Single):Integer;
function CoordY(mm:Single):Integer;
var
  Drukarka:TPrinter;
implementation

function MM_na_DPI(mm:single):integer;
var
  a,b:integer;
begin
  a:=GetDeviceCaps(Printer.Handle,LogPixelSX); //rozdzielczość drukarki
  b:=Round(mm*a/25.4); //dpi jest wartością całkowitą, stąd funkcja Round,
                       //która zaokrągla dzielenie do liczby całkowitej
  Result:=b;
end;

function DPI_na_MM(dots:integer):single;
var
  a:integer;
  b:real;
begin
  a:=GetDeviceCaps(Printer.Handle,LogPixelSX); //rozdzielczość drukarki
  b:=dots*25.4/a;
  Result:=b;
end;

function CoordX(mm:Single):Integer;
var pom:Integer;
Begin
  pom:=MM_na_DPI(mm);
  pom:=pom-GetDeviceCaps(Printer.Handle,PHYSICALOFFSETX);
  Result:=pom;
End;

function CoordY(mm:Single):Integer;
var pom:Integer;
Begin
  pom:=MM_na_DPI(mm);
  pom:=pom-GetDeviceCaps(Printer.Handle,PHYSICALOFFSETY);
  Result:=pom;
End;

end.