Zitat:
Wer noch Code mit GetSystemMetrics(SM_CXSIZEFRAME) aus der
Winapi.Windows nutzt, muss nach dem Umstieg auf Delphi 11 die Fenster eventuell auch anders/neu positionieren.
Dann ist es ein Fehler von Delphi 11.
Ein Betriebssystem bzw. die
API der jeweiligen Funktion von diesen) gibt die Breite des Borders vor und wenn ein Programm in dem fall Delphi von der Norm abweicht ist es schlichtweg Falsch.
Wenn ich mein Fenster (
nonVcl) mit Delphi kompiliere dann hat mir Delphi die Werte zur Verfügung zu stellen die dem Betriebssystem entsprechen.
Und zwar diese aus der
WinApi nix anderes.
Wo kommen wir da hin wenn jede Programmiersprache sein eigenes Süppchen kocht.
Delphi-Quellcode:
if IsWindowVisible(GetDlgItem(WinHandle, ID_MAXIMIZE)) then
begin
GetClientRect(WinHandle, rc);
xF := rc.Right;
yF := rc.Bottom;
xSide := 0;
BORDER := GetSystemMetrics(SM_CXFRAME); // SM_CXSIZEFRAME ist das gleiche
if ((P.X >= xF - BORDER) and ((P.Y >= yF - BORDER))) then
begin
HITTEST := HTBOTTOMRIGHT;
end
Ich muß mich darauf verlassen das die Koordinaten bzw. Border mir die richtigen Werte aus der
WinApi zurück gibt.
Die dürfen vom Delphi Compiler nicht verändert werden.
Sollte es jedoch nur die Fenster in der
IDE von Delphi betreffen kann es mir egal sein was die da rummurksen.
EDIT:
Es sollte nicht die Aufgabe einer Programmiersprache sein eine Anwendung High DPI fähig zu machen.
Das unterliegt dem Programmierer und zwar mit
Altbewährten Methoden unter Verwendung der vom System bereitgestellten API.