![]() |
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 |
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.
|
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. |
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. |
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:
Ist das True wird alles normal angezeigt, bei false übertrieben hoch skaliert. Ich habe in dem Beispielprojt Größe 9, also Standard belassen.
ParentFont := false
Beispielprojekt im Anhang |
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. |
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. |
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:
nachher:
for var I := 0 to ControlCount - 1 do
begin TControlClass(Controls[I]).ChangeScale(FCurrentPPI, FCurrentPPI, True); TControlClass(Controls[I]).ScalingFlags := ScalingFlags; end;
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; |
AW: Delphi 11 mit High DPI -> Formulare werden doppelt skaliert
ja das scheint das Problem zu beheben.
Danke :thumb: |
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? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:31 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