TControl.GetSystemMetrics verwendet die DPI-konforme Version
GetSystemMetricsForDPI wenn die Anwendung als
Per Monitor V2 aware läuft, ansonsten die normale
GetSystemMetrics Version. Dies entspricht der Empfehlung in der Windows Dokumentation zu
GetSystemMetrics:
Zitat:
This
API is not DPI aware, and should not be used if the calling thread is per-monitor DPI aware. For the DPI-aware version of this
API, see GetSystemMetricsForDPI.
Delphi liefert da also exakt die Werte zurück, die Windows bei der jeweiligen Funktion zurückliefert. Umgerechnet wird da gar nichts.
Wenn also
Windows.GetSystemMetrics und
TControl.GetSystemMetrics unterschiedliche Werte liefern, dann weil die Anwendung sich als
Per Monitor V2 aware registriert. In dem Fall ist aber der Aufruf von
Windows.GetSystemMetrics schlichtweg falsch. Microsoft schweigt sich auch aus, wie die Rückgaben von
Windows.GetSystemMetric bei solch falscher Verwendung aussehen. Das kann vom Windows-Build oder auch von der Skalierung des Monitors abhängen, auf dem das abfragende Control gerade dargestellt wird.
In jedem Fall liefert aber
TControl.GetSystemMetrics den korrekten Wert und ist demnach vorzuziehen.
Ich gehe mal davon aus, dass sowohl die Delphi 10.4 als auch die Delphi 11 Exe auf demselben Windows und demselben Monitor gestartet wurden. Andernfalls wären Unterschiede durchaus zu erwarten.