Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Frames skalieren falsch unter HighDPI-Gesichtspunkten (https://www.delphipraxis.net/209738-frames-skalieren-falsch-unter-highdpi-gesichtspunkten.html)

Carsten Hölscher 15. Jan 2022 18:48

Frames skalieren falsch unter HighDPI-Gesichtspunkten
 
Liste der Anhänge anzeigen (Anzahl: 2)
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

jaenicke 15. Jan 2022 20:01

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten
 
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.

Carsten Hölscher 15. Jan 2022 20:49

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ein frisch in Delphi 11 erstelltes Projekt, es zeigt das gleiche Verhalten.

Carsten

Carsten Hölscher 16. Jan 2022 18:37

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten
 
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

jaenicke 16. Jan 2022 19:11

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten
 
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.

Carsten Hölscher 16. Jan 2022 20:01

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten
 
Das scheint der gleiche Fall zu sein: https://quality.embarcadero.com/browse/RSP-36167

Carsten

Carsten Hölscher 17. Jan 2022 20:13

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten
 
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.

Carsten Hölscher 17. Jan 2022 20:21

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier noch das angepasste Testprojekt.

Carsten

Thomasl 16. Nov 2022 09:48

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten
 
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

Michael II 16. Nov 2022 13:05

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:11 Uhr.
Seite 1 von 2  1 2      

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