Ich bekomme es nicht hin, dass ein Frame unter HighDPI-Gesichtspunkten korrekt dargestellt wird.
Ausgangslage:
- Win 11 und Delphi 11, das Projekt wird aus Delphi 7 portiert.
- Hauptmonitor 4K mit 150% Darstellung, Zweitmonitor FullHD mit 100%
Der Anhang zeigt ein kleines Testfenster, was links ein paar Eingabefelder direkt auf dem Form hat. Der große Bereich rechts ist ein Panel, das zur Laufzeit mit dem Frame belegt wird.
Das erste Bild zeigt den Sollzustand, so sieht es aus, wenn man die Anwendung auf dem 4k-Monitor startet. Ziehe ich dann das Fenster auf den FullHD-Monitor, verwürfelt es den Frame, wie man im 2. Bild im Vergleich zu den Eingabefeldern links sieht, die korrekt verarbeitet werden. Ziehe ich es dann wieder zurück auf den 4k-Monitor, bleibt es falsch.
Starte ich die Anwendung auf dem FullHD-Monitor, ist es von Anfang an falsch.
Der dpi-Wert in der
dfm-Datei des Panels steht auf 144 - was m.E. korrekt ist, da der 4k-Monitor mit 150% mein "Arbeitsmonitor" für Delphi ist.
Da die Frames unter Delphi 7 ja auch etwas buggy waren, hatte ich auf dem Frame immer erstmal mit "clientalign" ein Panel gesetzt und darauf dann die eigentlichen Inhalte und außerdem alle Frames von einer eigenen Frame-Komponente abgleitet, die auf das OnScale-Ereignis reagiert und die Inhalte des Frames neu skaliert. Diese Eingriffe sind aber nicht schuld, hab das alles mal rausgenommen, dsa Verhalten wurde in keinem Fall wie erwartet.
Carsten