Delphi-PRAXiS

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/)
-   -   Delphi Windows Scaling für komplette Applikation deaktivieren (https://www.delphipraxis.net/209321-windows-scaling-fuer-komplette-applikation-deaktivieren.html)

361 22. Nov 2021 14:32

Windows Scaling für komplette Applikation deaktivieren
 
Hallo zusammen,

ich sitze mal wieder an einer älteren sehr umfangreichen Anwendung, welche mit dem Windows 10 Scaling einfach nicht funktioniert. Den Umbau auf unterstützte Skalierung möchte der Kunde nicht bezahlen. Bei über 1200 Forms und Frames mit diversen Ankern etc. ein großer Aufwand.

Meine Frage lautet: Könnte man die eingestellte Windows-Skalierung nicht für die komplette Anwendung einfach deaktivieren? Es können ruhig alle anderen Anwendungen skaliert sein, aber diese eben nicht. Es kommen bei neuangeschafften Rechnern oder RDP-Zugriffen mit voreingestellter Windows-Skalierung immer wieder solche Anfragen und das Problem, dass Controls abgeschnitten oder falsch dargestellt sind.

Ich habe hier im Forum schon einige Beiträge gelesen (Scaled-Property vom Form), aber nichts passendes gefunden. Könnt Ihr mir weiterhelfen?

NACHTRAG: Die Checkbox "EnableHighDPI" ist bei mir deaktiviert.

VG

DeddyH 22. Nov 2021 14:42

AW: Windows Scaling für komplette Applikation deaktivieren
 
In den Projektoptionen unter "Anwendung - Manifestdatei" den Haken bei "Hochauflösung aktivieren" entfernen, unter meinst Du etwas anderes?

361 22. Nov 2021 14:43

AW: Windows Scaling für komplette Applikation deaktivieren
 
Hi,

mein Nachtrag hat sich zeitlich mit Deiner Antwort überschnitten. Das habe ich schon deaktiviert. Trotzdem wird die Anwendung immer skaliert angezeigt.

DeddyH 22. Nov 2021 14:46

AW: Windows Scaling für komplette Applikation deaktivieren
 
Hast Du auf die Build-Konfiguration geachtet? Man kann/muss das für Debug und Release jeweils getrennt einstellen.

361 22. Nov 2021 14:51

AW: Windows Scaling für komplette Applikation deaktivieren
 
Hi,

ja diese sind alle deaktiviert. Das Projekt nutzt eine rc-Datei, muss dort vielleicht irgendwas noch eingestellt werden?

361 22. Nov 2021 14:53

AW: Windows Scaling für komplette Applikation deaktivieren
 
...ich habe es mal mit einem neuen Testprojekt ausprobiert, aber dort wird ein cxGrid und ein Button auch mit vergrößerter Schrift angezeigt. Ich möchte ja eben nicht, dass die vergrößerten Schriften in der Anwendung übertragen werden.´

Ergänzung: Wenn ich vom Form Scaled deaktiviere, sieht es gut aus. Aber ich kann das nicht für alle Forms machen. Einen einfacheren Weg gibt es nicht?

BerndS 22. Nov 2021 15:44

AW: Windows Scaling für komplette Applikation deaktivieren
 
Ich habe hier kein 10.2 mehr, aber in 10.4 gibt es die Option GDI-Skalierung. Zwar habe das noch nicht verwendet, aber es könnte Window dazu veranlassen, die Skalierung selbst zu berechnen.

hoika 22. Nov 2021 17:02

AW: Windows Scaling für komplette Applikation deaktivieren
 
Hallo,
reicht es nicht, dass in der jeweiligen Desktop-Verknüpfung auszuschalten?
Eigenschaften/ Kompatibilität/ Button "Hohe DPI-Einstellungen ändern"
und dort unten "Hohe DPI-Skalierung überschreiben -> Anwendung"


Dazu müsstest Du dann ev. trotzdem noch "Scaled=False" in jedem Form setzen,
und zwar direkt in der IDE (zur Laufzeit ist es zu spät).

dummzeuch 22. Nov 2021 17:28

AW: Windows Scaling für komplette Applikation deaktivieren
 
Zitat:

Zitat von 361 (Beitrag 1497986)
Ergänzung: Wenn ich vom Form Scaled deaktiviere, sieht es gut aus. Aber ich kann das nicht für alle Forms machen. Einen einfacheren Weg gibt es nicht?

Falls Deine Forms alle von einem gemeinsamen Form abgeleitet sind, kannst Du dort in der Methode Loaded Scaled := False setzen. Das wäre früh genug.

Ansonsten dürfte es auf viel Handarbeit oder ein Tool hinauslaufen, um alle .dfm-Dateien anzupassen. Letzteres ist nicht weiter schwierig.

THY4243 22. Nov 2021 19:33

AW: Windows Scaling für komplette Applikation deaktivieren
 
@361, Du schreibst, dass das Projekt eine eigene *.rc Datei verwendet.

Da lässt sich auch ein Manifest einbauen. Wenn Du möchtest, dass keine Skalierung stattfindet, dann sollte folgender Teil genügen (Die DPI Passage des Manifests aus der rc-Datei):
Code:
  // <!-- SetProcessDPIAware Function - xmlns:asmv3=\"urn:schemas-microsoft-com:asm.v3\" required in assembly -->
  " <asmv3:application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\15\12",
  "   <asmv3:windowsSettings>\15\12",
  "     <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">false</dpiAware>\15\12",
  "     <dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">unaware</dpiAwareness>\15\12",
  "     <gdiScaling xmlns=\"http://schemas.microsoft.com/SMI/2017/WindowsSettings\">false</gdiScaling>\15\12",
  "   </asmv3:windowsSettings>\15\12",
  " </asmv3:application>\15\12",
Bitte nicht über die führenden und abschließenden Anführungszeichen wundern. Diese sind erforderlich, wenn man zusätzlich zu den Versionsinfos auch das Manifest in einer selbst gepflegten Resourcedatei hat und der EMBA Resourcecompiler das umsetzen können soll.

Aber vielleicht ist eine Umstellung auf die Skalierung nicht so aufwändig. Dann natürlich ein anderes Manifest und evtl. hilft auch dieser Link mit der dort zu findenden Unit uStandardizeFonts: https://pastebin.com/dKpfnXLc
Der Aufruf jeweils in der Prozedur FormCreate mit "StandardizeFormFont(Self);" sollte klappen.

361 23. Nov 2021 07:22

AW: Windows Scaling für komplette Applikation deaktivieren
 
Hallo und guten Morgen.

Danke für Eure Antworten. Die Einstellung über die Programmverknüpfung möchte der Anwender nicht.

@THY4243: Ich habe Deinen Code einmal in meine rc-Datei kopiert, aber der Compiler bemängelt folgendes:

Code:
[BRCC32 Error] ApplicationIcon.rc(2): Expecting resource name or resource type name
Er markiert dabei Zeile:
Code:
" <asmv3:application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\15\12",
In meiner rc-Datei steht lediglich:
Code:
MAINICON ICON "Application.ico"
Was übersehe ich?

THY4243 23. Nov 2021 21:47

AW: Windows Scaling für komplette Applikation deaktivieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

das mit der Empfehlungen Scaled := False zu setzen ist ein Punkt, der schon genannt wurde und dem ich mich anschließe.
Es gibt da noch zwei weitere Einstellungen, die im jeweiligen Form helfen können. AutoScroll := False und ParentFont:= False.

Wegen der Resource / Manifestdatei - in der ZiP (Anlage) findet sich ein Beispiel, wie das aussieht. Die Versionierung muss dazu in der Delphi IDE ausgeschaltet sein und auch die DPI-Einstellungen. Wie die gewünscht *.rc Datei dann in der *.dpr einzubinden ist - siehe das Beispiel und auch den Hinweis von Uwe Raabe https://www.delphipraxis.net/1449426-post7.html
Wichtig ist, den Standardeintrag "{$R *.res}" auszukommentieren oder zu löschen.

Die Kompatibilitätseinträge im Manifest "supportedOS" (Vista bis Windows 10) wirken sich auch bei der Abfrage der Windows-Version aus dem Programm heraus aus. Mit // am Zeilenanfang lassen diese Einträge sich auskommentieren, falls Seiteneffekte auftreten.

In wie weit die Ansätze bei dem Projekt des Kunden helfen, hopefully. Vielleicht findet sich eine Kombination.

361 24. Nov 2021 08:46

AW: Windows Scaling für komplette Applikation deaktivieren
 
@THY4243: Hallo, ich habe es soeben getestet und damit hat es prima geklappt :-D Vielen Dank noch einmal für die tolle Hilfe.

THY4243 24. Nov 2021 20:55

AW: Windows Scaling für komplette Applikation deaktivieren
 
@361 - Gerne, freut mich, wenn es passt.


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