![]() |
VCL-Form wird nicht skaliert, obwohl Scaled = True
Ich habe mir ein Surface Pro 3 gekauft, das hat ja eine ziemlich hohe Bildschirmauflösung, daher habe ich die Systemskalierung auf 175% gestellt, damit das alles noch gut lesbar ist.
Bei 2 meiner Programme werden die Forms nicht skaliert, obwohl alle die Einstellung "scaled = True" haben. Die Programme hatte ich von XE nach XE7 übernommen. Die XE-Versionen werden richtig skaliert. Ich habe allerdings auch andere XE7-Programme, die ich entweder übernommen oder neu erstellt habe, wo alles richtig skaliert wird. Ich bin hier im Moment ziemlich ratlos. Hat jemand evtl. mal vor einem ähnlichen Problem gestanden und hat einen Tipp für mich? |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
Ergänzung: Wenn man unter Windows in den Kompatibilitätseinstellungen die Option "Skalierung bei hohem DPI-Wert deaktivieren" aktiviert, dann werden zumindest die Schriften halbwegs richtig in der Größe skaliert angezeigt.
Die Grafiken werden allerdings nicht skaliert, bleiben also klein, das sieht schon etwas seltsam aus. |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
Schau dir mal die Manifestsektion in der Exe an? Je nach Eintrag für Kompatiblität oder "ich kann Skalieren" verhält sich die Exe anders.
|
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
Das sind die Manifest-Einstellungen, bis auf die Programmnamen identisch mit einer anderen Manifest-Datei, wo es beim Programm aber wie gewünscht funktioniert:
Delphi-Quellcode:
Gibt es etwas, was ich hier ändern muss? Welcher Parameter sagt denn genau etwas über die Skalierung aus?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="PC-Notizz.exe" type="win32"/> <description>Hastasoft PC-Notizz!</description> <!-- Identify the application security requirements. --> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="AsInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- Windows 8.1 --> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> <!-- Windows Vista --> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!-- Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> <!-- Windows 8 --> <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> </application> </compatibility> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/> </dependentAssembly> </dependency> </assembly> |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
Zitat:
Code:
sein.
<dpiAware>
Siehe ![]() |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
Mit <dpiAware> sagt man Windows, ob das Programm mit hochauflösenden Displays klar kommt und nicht (von Windows) skaliert werden muß.
Was für eine DPI ist denn bei deiner Form eingestellt? |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
Mit DPI-Wert meinst Du wahrscheinlich PixelsPerInch? Das sind 96, halt die Größe zur Entwicklungszeit.
Ich habe das Manifest nun mal mit dem DPI-Aware Punkt ergänzt, aber egal, ob ich dort true oder false setze, es wird nicht skaliert.
Code:
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86" name="PC-Notizz.exe" type="win32"/> <description>Hastasoft PC-Notizz!</description> <!-- Identify the application security requirements. --> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="AsInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true</dpiAware> </asmv3:windowsSettings> </asmv3:application> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- Windows 8.1 --> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> <!-- Windows Vista --> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!-- Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> <!-- Windows 8 --> <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> </application> </compatibility> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/> </dependentAssembly> </dependency> </assembly> |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
OK, musste den Eintrag etwas anders machen, so funktioniert es nun:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="PC-Notizz.exe" type="win32"/> <description>Hastasoft PC-Notizz!</description> <!-- Identify the application security requirements. --> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="AsInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>false</dpiAware> </asmv3:windowsSettings> </asmv3:application> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- Windows 8.1 --> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> <!-- Windows Vista --> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!-- Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> <!-- Windows 8 --> <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> </application> </compatibility> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/> </dependentAssembly> </dependency> </assembly> |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
PS:
![]() |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
So, abschließend noch ein Dankeschön für die Hinweise.
Himitsu, Dein Tool macht einen guten Eindruck. Auf jeden Fall sehr praktisch, dass man sich die Erläuterungen auch noch zu den einzelnen Einstelldingen ansehen kann, z.B. auch hier gut für DPI-Aware. :thumb: |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
DPI-Aware ist bislang irgendwie an mir vorbeigegangen, bzw. habe es wohl mal registriert, der Sache aber keine allzu große Wichtigkeit zugewiesen.
Wer sich noch nicht mit dem Thema befasst haben sollte, dem rate ich mal unter Windows 8 bei einem Monitor mit hoher Bildschirmauflösung (also 1920 x 1080 oder höher) auf 150% Skalierung zu stellen und dann mal sein Programm dort ausführen zu lassen. Wer seine Anwendung noch nicht DPI-Aware tauglich gemacht hat, bekommt dann entweder eine gar nicht skalierte Anwendung zu sehen (wo man die Elemente mit der Lupe suchen muss) oder eine von Windows skalierte, wo die Schriftarten sehr verschwommen sind (wirklich igitt). Das Thema bekommt auch immer mehr Bedeutung mit 4K-Monitoren und Tabletts mit hoher Bildschirmauflösung. Ich werde also wohl oder übel nun nach und nach alle meine Anwendungen DPIAWare taublich machen, denn ohne sieht es auf Monitoren mit hoher Bildschirmauflösung und Skalierungen mit 150 oder größer echt übel aus... Leider scheint da sehr viel Handarbeit notwendig zu sein (also Anpassung von bestimmten Elementen in Größe und Breite, trotzdem noch gewisse Font-Korrekturen, von den ganzen Bitmaps mal abgesehen). |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
|
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
Alexander Halser (Help & Manual) hat da vor ein paar Monaten mal einen interessanten Artikel dazu geschrieben:
![]() |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
Zitat:
Wenn ich da so Sachen wie z.b. den Datepicker sehe wird mir übel. Ich hätte gerne FireUI Komponenten die in Look&Feel genau den VCL Komponenten gleichen, das wäre für mich mal ein wirklicher Anreiz zu migrieren. Leider gibts den VST nich für FireUI? Apropo V6.0 ist draußen. :) mfg newbe |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
FMX basiert komplett auf Skins. Können also beliebig aussehen. Der VST für FMX wäre ein gute Sache.
|
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
@MKinzler
Das ist mir bewusst, aber ich erwarte dort was fertiges. Bei WPF genau der selbe Mist. Die StandardStyles sind einfach nur unterirdisch schlecht. Wir haben für ein kleineres WPF projekt schon allein ein halbes Jahr gebraucht um eigene vernünftige Komponenten mit ansprechendem Aussehen und gewohnter Bedienung zu erstellen. Und so richtig gefällts mir immer noch nicht, auch wenn der Kunde das Design abgenommen hat. Produktivität kann man auch sinnlos verbraten. Ja man könnte teuer welche Kaufen, will ich aber nicht. Wie ist den die Performance von FMX List und Gridviewkomponenten? Haste da Erfahrungswerte? mfg newbe |
AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
Vielen Dank für die Links. Der Link von Uwe befasst sich direkt mit Delphi-Lösungen und ist daher leicht verständlich.
Ein absolutes muss für DPI-Aware ist natürlich für das Thema Bildbearbeitung gegeben, ebenso für Textverarbeitung. Denn mit der Nicht DPI-Aware verwaschenen Darstellung hat man keine Möglichkeit mehr zu erkennen, ob es an der Grafik liegt oder an der Programmanzeige. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 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