Einzelnen Beitrag anzeigen

Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Metafile spinnt bei hochauflösenden Bildschirmen (>=150% scaling)

  Alt 1. Feb 2016, 13:18
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;
  Mit Zitat antworten Zitat