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
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
10.129 Beiträge
 
Delphi 12 Athens
 
#1

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 15. Jan 2022, 20: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
AppCentral
  Mit Zitat antworten Zitat
Carsten Hölscher

Registriert seit: 29. Jul 2008
79 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 15. Jan 2022, 20: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
79 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 16. Jan 2022, 18: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 18:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
10.129 Beiträge
 
Delphi 12 Athens
 
#4

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 16. Jan 2022, 19: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
AppCentral
  Mit Zitat antworten Zitat
Carsten Hölscher

Registriert seit: 29. Jul 2008
79 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 16. Jan 2022, 20: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
79 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 17. Jan 2022, 20: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
79 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

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

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


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 15:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz