Du hast halt bei allen Rechnungen immer mindestens eine Rundung der Werte drin.
Und demnach ergeben sich unterschiedliche Ergebnisse.
also wenn's möglichst genau sein soll, dann entweder SetMapMode, da sind die Ungenauigkeiten über den gesamten "Monitor" verteilt, oder du Rundest nur einmal und das ganz weit zum Schluß der Rechnung.
wenn du nur einen Monitor hast,
oder alle Monitore die gleiche Auflösung haben und gleich groß sind,
bzw. alle Monitore das gleiche Auflösungsverhälnis (DPI) haben:
Delphi-Quellcode:
var h: hDC;
hres, vres, hsiz, vsiz: Integer;
h := GetDC(GetDesktopWindow);
hres := GetDeviceCaps(H, HORZRES);
vres := GetDeviceCaps(H, VERTRES);
hsiz := GetDeviceCaps(h, HORZSIZE);
vsiz := GetDeviceCaps(h, VERTSIZE);
ReleaseDC(GetDesktopWindow, h);
Balken5cmBreit := hres / hsiz * 50;
wenn es mehrere unterschiedliche Monitore gibt:
Delphi-Quellcode:
var h: hDC;
hres, vres, hsiz, vsiz: Integer;
i := AufWelchemMonitorLiegtDerBalken;
h := GetDC(Screen.Monitors[i].Handle);
hres := GetDeviceCaps(H, HORZRES);
vres := GetDeviceCaps(H, VERTRES);
hsiz := GetDeviceCaps(h, HORZSIZE);
vsiz := GetDeviceCaps(h, VERTSIZE);
ReleaseDC(Screen.Monitors[i].Handle, h);
Balken5cmBreit := hres / hsiz * 50;