Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Delphi 11 mit High DPI -> Formulare werden doppelt skaliert (https://www.delphipraxis.net/208816-delphi-11-mit-high-dpi-formulare-werden-doppelt-skaliert.html)

Friday 16. Sep 2021 20:48

Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Stellt man bei Delphi 11 in den "Optionen->Benutzeroberfläche-Formular-Designer->High DPI" den Modus auf "Automatisch", werden die Formulare in der in Windows eingestellten Skalierung dargestellt (also wie man es erwarten würde).
Erzeuge ich das Projekt wird die so erstellte Anwendung aber nun (teilweise) doppelt skaliert. Also manche Texte sind in der zu erwarteten Größe (z.B. TEdit, TButton, TMainMenu), andere sind viel zu groß (TLabel, TGroupBox).
Projekteinstellung: GDI Skalierung
Umgebung: Win10 Pro, 2 x 4k Monitoren mit 150% Skalierung.

Mit "Über v2 Monitor" statt "GDI Skalierung" ist dieses Problem behoben, allerdings machen dann andere Komponenten die (noch) nicht High-DPI fähig sind Probleme.

Mit Delphi 10.4 war das kein Problem, allerdings war der Code im Editor unscharf :roll:

Aktuelle Lösung ist die High DPI Einstellungen des FormularDesigners auf "Low DPI" zu lassen, womit die Formulare dann zur Entwurfszeit winzig klein sind. Kann ich natürlich auch einfach nur vor jedem Kompilieren wieder umstellen, aber das sind alles keine schönen Lösungen.
Kann den Bug jemand bestätigen oder gibt es eine andere Lösung?

danke

Uwe Raabe 16. Sep 2021 20:54

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Kannst du das irgendwie als Minimalprojekt bereitstellen? Ich versuche möglichst viele problematische Szenarien zu sammeln.

UntoterGeist 16. Sep 2021 21:02

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Erstellst du damit FMX Anwendungen?

Bei FMX Anwendungen kann man ein ScaledLayout mit der Align Fit verwenden und das DPI Support Zeug komplett ausschalten. Tricky wird es dann nur, wenn man skalierbare Fenster hat. Ich hätte jetzt auch angenommen, dass diese Einstellung Anwendung und Designer nicht gerade gleichzeitig betrifft. Weil es ja doch zwei unterschiedliche Dinge sind. Selber hab ich diese Option standardmäßig aus, weil das nur Probleme macht. Aber benutze an dem Entwicklungsrechner auch keinen 4K Monitor.

Friday 17. Sep 2021 06:51

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
es geht um VCL Anwendungen. FMX habe ich noch nicht ausprobiert.

Ich schau mal ob ich heute dazu komme ein Beispiel-Projekt zu erstellen.

Friday 17. Sep 2021 07:26

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Liste der Anhänge anzeigen (Anzahl: 1)
der springende Punkt, bzw. Einstellung ist:
Delphi-Quellcode:
ParentFont := false
Ist das True wird alles normal angezeigt, bei false übertrieben hoch skaliert. Ich habe in dem Beispielprojt Größe 9, also Standard belassen.

Beispielprojekt im Anhang

Uwe Raabe 17. Sep 2021 08:26

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Nur um das richtig einzuordnen: Die Darstellung im Designer ist OK, aber die daraus erzeugte Exe zeigt das Problem?

Ich bin etwas irritiert weil Toolbar1.Height = 65, aber Toolbar1.ButtonHeight = 75 ist. Das ist aber schon in der Original-DFM so.

Friday 17. Sep 2021 08:52

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
genau im Formular-Designer wird es korrekt angezeigt.

Die Toolbar hab ich nur schnell hingeklatscht ohne die Höhen zu überprüfen.

Uwe Raabe 17. Sep 2021 09:42

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Leg doch bitte mal eine Kopie der Vcl.Forms.pas in dein Projektverzeichnis (da wo die dpr liegt). Dann ändere die Zeilen 4352 bis 4356 mal so ab, dass die Schleife nicht über Controls sondern über Components geht.

vorher:
Delphi-Quellcode:
        for var I := 0 to ControlCount - 1 do
        begin
          TControlClass(Controls[I]).ChangeScale(FCurrentPPI, FCurrentPPI, True);
          TControlClass(Controls[I]).ScalingFlags := ScalingFlags;
        end;
nachher:
Delphi-Quellcode:
        for var I := 0 to ComponentCount - 1 do
        begin
          if not (Components[I] is TControl) then Continue;
          TControlClass(Components[I]).ChangeScale(FCurrentPPI, FCurrentPPI, True);
          TControlClass(Components[I]).ScalingFlags := ScalingFlags;
        end;

Friday 17. Sep 2021 12:56

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
ja das scheint das Problem zu beheben.

Danke :thumb:

Benmik 21. Okt 2021 23:41

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Ich probiere gerade Delphi 11 so ein bisschen aus und wollte es wegen des geschilderten Problems schon wieder löschen, bevor ich auf Uwes genialen Ratschlag kam. Ich wundere mich, dass man nicht mehr Hilferufe findet und Uwes Lösung augenscheinlich nur hier und sonst nirgendwo.
Vielleicht auch noch ein paar Worte, warum "Component" das Problem löst?

Uwe Raabe 22. Okt 2021 00:11

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Zitat:

Zitat von Benmik (Beitrag 1496458)
Vielleicht auch noch ein paar Worte, warum "Component" das Problem löst?

Die Liste der Controls liefert nur die Controls, deren Parent das Form ist. Components liefert alle Components, deren Owner das Form ist. Ein Button in einem Panel wird somit von Controls nicht erfasst, von Components aber schon.

Benmik 22. Okt 2021 01:04

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Tja, luzide wie immer. Das heißt also, dass dies ein Fehler ist und die Stelle in Vcl.Forms.pas von Emba geändert werden muss?

Uwe Raabe 22. Okt 2021 07:25

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Zitat:

Zitat von Benmik (Beitrag 1496460)
Tja, luzide wie immer. Das heißt also, dass dies ein Fehler ist und die Stelle in Vcl.Forms.pas von Emba geändert werden muss?

Genau!

snet 29. Okt 2021 17:40

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Hallo in die Runde...
wenn ich mich nicht täusche, wurde die Problemlösung von Uwe Raabe heute durch ein Patch von Embacadero ausgerollt.

Die Lösung war für mich die Rettung im dpi skaling jungle...:-D

Uwe Raabe 29. Okt 2021 22:59

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Zitat:

Zitat von snet (Beitrag 1496804)
wurde die Problemlösung von Uwe Raabe heute durch ein Patch von Embacadero ausgerollt.

Um das klar zu stellen: Die Lösung stammt nicht von mir...

harfes 30. Okt 2021 13:17

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Super! Das löst zumindest mal die Skalierungsprobleme in D11...aber wo bitte soll das Patch von Emba sein???

Hartmut

Uwe Raabe 30. Okt 2021 13:26

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Zitat:

Zitat von harfes (Beitrag 1496827)
aber wo bitte soll das Patch von Emba sein???

Sollte als Link rechts neben dem Titel der Welcome Page erscheinen. Alternativ im GetIt-Package-Manager unter Patches and Hotfixes.

harfes 30. Okt 2021 13:51

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmmm, im GetIt-Package-Manager unter Patches and Hotfixes erscheint nur das von mir bereits installierte Update1 (siehe Bild) - das behebt aber das Problem nicht. Sonst wird nix weiter angezeigt (die Welcome page habe ich generell abgeschaltet).

Hartmut

Uwe Raabe 30. Okt 2021 16:28

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Na ja, wenn der Hotfix dein Problem nicht löst, dann ist das eben so.

harfes 30. Okt 2021 18:30

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Hallo Uwe,

bitte nicht falsch verstehen: es hörte sich so an, als wenn es einen fertigen Patch dafür gibt. Den einzigen Patch bzw das einzige Update ist das von vor ein paar Tagen. Wenn ich den Code von Hand in der Vcl.Forms.pas einbaue, dann funktioniert es (jedenfalls nach einem ersten, schnellen Test). Ich wollte nur sagen, dass der von Dir genannte Code nicht im Update1 enthalten ist und auch sonst keine anderer Patch/Hotfix angezeigt wird.

Hartmut

Pfaffe 30. Okt 2021 19:39

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Bei mir steht nach dem Update (Version 28.0.42600.6491) dies:
Delphi-Quellcode:
  for I := 0 to ComponentCount - 1 do
     if Components[I] is TControl then
       begin
         TControlClass(Components[I]).ChangeScale(FCurrentPPI, FCurrentPPI, True);
         TControlClass(Components[I]).ScalingFlags := ScalingFlags;
       end;

harfes 31. Okt 2021 09:34

AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
 
Da scheint bei mir etwas nicht funktioniert zu haben mit dem Update...ich habe mir das nochmal heruntergeladen (direkt von Emba, nicht über GetIt) und nochmal installiert. Jetzt passt es und es sieht aus wie bei Pfaffe - danke für den Hinweis.

Hartmut


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 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