AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Frames skalieren falsch unter HighDPI-Gesichtspunkten
Thema durchsuchen
Ansicht
Themen-Optionen

Frames skalieren falsch unter HighDPI-Gesichtspunkten

Ein Thema von Carsten Hölscher · begonnen am 15. Jan 2022 · letzter Beitrag vom 17. Nov 2022
Antwort Antwort
Seite 1 von 2  1 2      
Carsten Hölscher

Registriert seit: 29. Jul 2008
77 Beiträge
 
Delphi 11 Alexandria
 
#1

Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 15. Jan 2022, 19:48
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
Miniaturansicht angehängter Grafiken
frame1.jpg   frame2.png  
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 15. Jan 2022, 21:01
Kannst du vielleicht ein kleines Testprojekt mit diesem Fenster erstellen, einfach nur das Design ohne Funktionalität?
Dann lässt sich dazu vermutlich mehr sagen.

Zudem könntest du damit einen Supportfall aufmachen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Carsten Hölscher

Registriert seit: 29. Jul 2008
77 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 15. Jan 2022, 21:49
Hier ein frisch in Delphi 11 erstelltes Projekt, es zeigt das gleiche Verhalten.

Carsten
Angehängte Dateien
Dateityp: zip FrameTest.zip (6,2 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Carsten Hölscher

Registriert seit: 29. Jul 2008
77 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 16. Jan 2022, 19:37
Hat das Beispiel mal wer testen können - ob sich das nur bei mir falsch verhält?
Wer keine 2 unterschiedlichen Monitore hat, sollte auch den Vergrößerungswert in Windows umstellen können, während das Programm offen ist. (Nachtrag: Ja, produziert den Fehler genauso)

Carsten

Geändert von Carsten Hölscher (16. Jan 2022 um 19:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 16. Jan 2022, 20:11
Ich habe leider aktuell kein Delphi 11 zur Verfügung. Ich habe es einmal mit Delphi 10.4.2 und Windows 11 getestet. Da klappt alles normal. Du könntest also vielleicht als Zwischenlösung erst einmal dorthin portieren. Der Schritt zu Delphi 11 ist dann ja sehr klein.

Die Ursache dürfte an den High-DPI Anpassungen in Delphi 11 liegen, mit denen es ja schon einige Probleme gab. Da wird es vermutlich bald noch Fixes geben. Ich bin aber nicht auf dem Laufenden, sprich habe nicht geschaut was sich in den entsprechenden Jira-Einträgen getan hat.
Ich würde an deiner Stelle tatsächlich mit diesem Beispiel einen Supportfall aufmachen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Carsten Hölscher

Registriert seit: 29. Jul 2008
77 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 16. Jan 2022, 21:01
Das scheint der gleiche Fall zu sein: https://quality.embarcadero.com/browse/RSP-36167

Carsten
  Mit Zitat antworten Zitat
Carsten Hölscher

Registriert seit: 29. Jul 2008
77 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 17. Jan 2022, 21:13
Ich hab wohl jetzt eine Lösung für das Problem. Man baut sich eine eigene Frameklasse wie unten und leitet alle Frames von dieser ab, also TMyFrame = class(TFrameCH) statt TMyFrame = class(TFrame).

Damit verhalten sich alle meine Testfälle korrekt, wobei ich möglicherweise nicht alle erfast habe. Der Entwurfsmonitor steht wie schon geschrieben auf 150%, die DPI-Werte in der dfm-datei auf 144.

Delphi-Quellcode:
unit CHFrame;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TFrameCH = class(TFrame)
  private
    { Private-Deklarationen }
    FCreate:Boolean;
    FDPIStart:integer;
  protected
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
    procedure ScaleForPPI(NewPPI: Integer); override;
  end;

implementation

{$R *.dfm}

constructor TFrameCH.Create(AOwner: TComponent);
var m:TMonitor;
begin
  FCreate:=true;
  m:=Screen.MonitorFromWindow(Application.MainForm.Handle, mdNearest);
  FDPIStart:=m.PixelsPerInch;

  inherited Create(AOwner);

  if Self.PixelsPerInch <> m.PixelsPerInch then
  begin
    ScaleControls(96, Self.PixelsPerInch);
  end;
end;

procedure TFrameCH.ScaleForPPI(NewPPI: Integer);
var m:TMonitor;
begin
  m:=Screen.MonitorFromWindow(Application.MainForm.Handle, mdNearest);
  if not FCreate then
  begin
    ScaleControls(m.PixelsPerInch, FDPIStart);
    FDPIStart:=m.PixelsPerInch;
  end
  else
  begin
    Inherited;
    FCreate:=false;
  end;
end;

end.
  Mit Zitat antworten Zitat
Carsten Hölscher

Registriert seit: 29. Jul 2008
77 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 17. Jan 2022, 21:21
hier noch das angepasste Testprojekt.

Carsten
Angehängte Dateien
Dateityp: zip FrameTest.zip (6,8 KB, 14x aufgerufen)
  Mit Zitat antworten Zitat
Thomasl

Registriert seit: 19. Jun 2006
Ort: Vreden
67 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 16. Nov 2022, 10:48
Ich habe noch ein anderes Problem
Alexandria 11.2 Patch 1

IDE steht auf 96DPI
Ein Frame erstellt.
PixelsPerInch ist im DFM nicht vorhanden
noch alles OK

IDE auf eine andere DPI stellen. z.B 192
wenn man das Frame öffnet, wird alles in der IDE mit doppelt größe angezeigt
PixelsPerInch im DFM steht auf 192
noch alles OK

Öffnet man die IDE mit 96 DPI, wird nicht auf 96 DPI zurück Skaliert
nach dem Speichern bleibt PixelsPerInch auf der alten größe z.B 192

Ein Wechsel von 192 auf 144 DPI klappt aber

Bei Forms klappt der Wechsel zurück auf 96 DPI
Thomas Levering
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 16. Nov 2022, 14:05
Hallo Thomasl

meinst du mit IDE steht auf 96DPI die IDE Einstellung unter Tools > Optionen > Benutzeroberfläche > Formular Designer > High DPI oder die Skalierung unter Windows?

Ich habe wohl falsch getestet. Ich habe ein neues Projekt erstellt mit einer Form und einem Frame. Ich habe sowohl mit der High DPI Einstellung der IDE wie auch mit der Skalierung unter Windows probiert; Form wie Frame wurden nach dem Laden immer wie erwartet angezeigt.
Michael Gasser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz