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
Carsten Hölscher

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

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
 
#2

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
 
#3

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
771 Beiträge
 
Delphi 11 Alexandria
 
#4

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
Thomasl

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

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 16. Nov 2022, 14:18
Hallo Thomasl
meinst du mit IDE steht auf 96DPI die IDE Einstellung unter Tools > Optionen > Benutzeroberfläche > Formular Designer > High DPI Windows probiert; Form wie Frame wurden nach dem Laden
Ja in der IDE. Wechsel zwischen LowDPI und Auto oder Custom

In Windows steht das dann auch schon auf z.B. 200%
Thomas Levering
  Mit Zitat antworten Zitat
Thomasl

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

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 16. Nov 2022, 14:22
Wenn ich hier das Beispiel öffne.
Da sind PixelsPerInch im Frame auf 144

Sind in der IDE LowDPI 96 eingestellt, bleiben nach dem öffnen des Frames (ändern Speichern) die PixelsPerInch auf 144
Thomas Levering
  Mit Zitat antworten Zitat
Michael II

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

AW: Frames skalieren falsch unter HighDPI-Gesichtspunkten

  Alt 17. Nov 2022, 08:16
Wenn ich hier das Beispiel öffne.
Da sind PixelsPerInch im Frame auf 144

Sind in der IDE LowDPI 96 eingestellt, bleiben nach dem öffnen des Frames (ändern Speichern) die PixelsPerInch auf 144
In Delphi 11.2 [11 Version 28.0.46481.1287] funktioniert es einwandfrei. (Hab's sowohl mit dem Testprojekt wie auch mit einem neuen Projekt rauf und runter geprüft,)
Michael Gasser
  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 13:41 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 by Thomas Breitkreuz