VCL
Grund: Folgender Code meldet nach Klick auf Button1 bis und mit Delphi 10.4 (für mein System erwartet) für cxsizeframe 9 zurück, bei Delphi 11 4.
Delphi-Quellcode:
function cxsizeframe : integer;
begin
Result := GetSystemMetrics(SM_CXSIZEFRAME);
end;
...
Weiss jemand wieso Delphi 11 hier einen anderen Wert ermittelt und damit das Verhalten von Anwendungen ändert?
Ab Delphi gibt es zusätzlich zu
Winapi.Windows.GetSystemMetrics() in der
VCL eine gleichnamige function in TControl.GetSystemMetrics(), welche intern dann
Winapi.Windows.GetSystemMetricsForDpi() aufruft, und zwar abhängig davon ob die Anwendung mit PerMonitorV2-Skalierung läuft.
Vergleiche mal die Ergebnisse von
Winapi.Windows.GetSystemMetrics(SM_CXSIZEFRAME)
und
(Self.)GetSystemMetrics(SM_CXSIZEFRAME);
Im Grunde ist das eine gute Idee, denn damit wird bestehender Code ohne Anpassung HighDPI-fähig. Warum SM_CXSIZEFRAME bei aktiver Skalierung nur noch 4 statt 9 ist, kann ich aber auch nicht erklären.