procedure TForm1.Button1Click(Sender: TObject);
…
Elsőként meghatározzuk, hogy az adott nyomtatónak mekkora a felbontása x és y irányban. Ezt a GetDeviceCaps függvény adja meg DPI-ben, vagyis, hogy egy inch hosszra hány pontot képes rajzolni az adott nyomtató.
x:=GetDeviceCaps(Printer.Handle, LOGPIXELSX);
y:=GetDeviceCaps(Printer.Handle, LOGPIXELSY);
Ezt követően lekérdezzük a nyomtató által kezelt lap fizikai szélességét és magasságát.
w:=GetDeviceCaps(Printer.Handle, PHYSICALWIDTH);
h:=GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);
Az értékeket átszámítjuk milliméterre és úgy jelenítjük meg. Ehhez fel kell használnunk a már meghatározott felbontását a nyomtatónak, valamint az inch-et is át kell számítanunk milliméterre.
ListBox1.Items.Add(Format('Fizikai szélesség: %8.2f mm', [w*25.4/x]));
ListBox1.Items.Add(Format('Fizikai magasság: %8.2f mm', [h*25.4/y]));
A nyomtatható terület szélességét és magasságát adja vissza számunkra a TPrinter osztály PageWidth és PageHeight property-je.
ListBox1.Items.Add(Format('Lap szélesség: %8.2f mm', [Printer.PageWidth*25.4/x]));
ListBox1.Items.Add(Format('Lap magasság: %8.2f mm', [Printer.PageHeight*25.4/y]));
A nem nyomtatható terület kezdő x és y koordinátája lekérdezhető szintén a GetDeviceCaps által, így már csak az marad hátra, hogy a fenti ismereteket felhasználva kiszámítsuk a nem nyomtatható terület jobb oldalát és alsó szélét.
margin.Left:=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
margin.Top:=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
A jobb oldal és az alsó szél távolságát az alábbi egyszerű kivonásokkal kapjuk.
margin.Right:=w-margin.Left-Printer.PageWidth;
margin.Bottom:=h-margin.Top-Printer.PageHeight;
Ezt követően már csak a nem nyomtatható terület méretének megjelenítése van szükség, miközben átszámítjuk azokat is milliméterre.
ListBox1.Items.Add(Format('Bal margó: %8.2f mm', [margin.Left*25.4/x]));
ListBox1.Items.Add(Format('Felso margó: %8.2f mm', [margin.Top*25.4/y]));
ListBox1.Items.Add(Format('Jobb margó: %8.2f mm', [margin.Right*25.4/x]));
ListBox1.Items.Add(Format('Alsó margó: %8.2f mm', [margin.Bottom*25.4/y]));