In was für Einheiten wird denn auf dem Bildschirm und dem Drucker gezeichnet?
Wie meinst du, in was für Einheiten?
Wir bestimmen die Auflösung in Pixel pro Millimeter (einfach mit GetDeviceCaps(Can.Handle, HORZRES) / GetDeviceCaps(Can.Handle, HORZSIZE)
Und dann skalieren wir die Grafik entsprechend. Wir drucken sozusagen in Millimetern. Via Pixel. Äh...
Aber ab 150% Scaling kommt bei Windows offensichtlich eine dpi-Virtualisierung dazu.
Erster Schritt Richtung Lösung:
Delphi-Quellcode:
// From https://msdn.microsoft.com/en-us/library/windows/desktop/dd144877(v=vs.85).aspx and
// http://stackoverflow.com/questions/25924614/quick-report-displaying-or-printing-a-report-incorrectly-with-windows-font-size
function scaleToNativeDeskRes(pVal: Integer): Integer;
var tTemp: HDC;
begin
tTemp := GetDC(0);
try
Result := MulDiv(pVal, GetDeviceCaps(tTemp, DESKTOPVERTRES), GetDeviceCaps(tTemp, VERTRES));
finally
ReleaseDC(0, tTemp);
end;
end;