Falls es dir noch hilft: Hier hab ich mal alle Ränder eines bestimmten Druckers herausfinden wollen. Das Ergebnis der Funktionen ist in Millimetern. Aber zum Drucken brauchst du die Ränder links und oben nicht zu berücksichtigen, da der Canvas des Druckers bei 0,0 auf dem Papier schon sichtbar ist.
Delphi-Quellcode:
function TPrinterSettings.DrRand1mm: integer;
var dpi: integer;
begin //linker Rand
dpi := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
if dpi <> 0 then
result:=round((GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX)/dpi)*25.4) ELSE
result := 0;
end;
function TPrinterSettings.DrRand2mm: integer;
var dpi: integer;
begin //oberer Rand
dpi := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
if dpi <> 0 then
result:=round((GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY)/dpi)*25.4) ELSE
result := 0;
end;
function TPrinterSettings.DrRand3mm: integer;
var dpi: integer;
begin //rechter Rand
dpi := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
if dpi <> 0 then
result:=round((GetDeviceCaps(Printer.Handle, PHYSICALWIDTH)-
GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX)-
GetDeviceCaps(Printer.Handle, HORZRES))/dpi*25.4) ELSE
result := 0;
end;
function TPrinterSettings.DrRand4mm: integer;
var dpi: integer;
begin //rechter Rand
dpi := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
if dpi <> 0 then
result:=round((GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT)-
GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY)-
GetDeviceCaps(Printer.Handle, VERTRES))/dpi*25.4) ELSE
result := 0;
end;