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/)
-   -   VCL-Form wird nicht skaliert, obwohl Scaled = True (https://www.delphipraxis.net/185242-vcl-form-wird-nicht-skaliert-obwohl-scaled-%3D-true.html)

Harry Stahl 25. Mai 2015 11:58

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?

Harry Stahl 25. Mai 2015 14:20

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.

Bernhard Geyer 25. Mai 2015 14:21

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.

Harry Stahl 25. Mai 2015 14:30

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:
<?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>
Gibt es etwas, was ich hier ändern muss? Welcher Parameter sagt denn genau etwas über die Skalierung aus?

Olli73 25. Mai 2015 15:11

AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
 
Zitat:

Zitat von Harry Stahl (Beitrag 1302956)
Welcher Parameter sagt denn genau etwas über die Skalierung aus?

Müsste
Code:
<dpiAware>
sein.

Siehe hier.

himitsu 25. Mai 2015 15:23

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?

Harry Stahl 25. Mai 2015 18:51

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>

Harry Stahl 25. Mai 2015 19:14

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>

himitsu 25. Mai 2015 19:24

AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
 
PS: Hier im Forum suchenManifest-Creator (falls du öfters mal deine Manifeste falsch zuammenbaust :stupid:)

Harry Stahl 25. Mai 2015 20:03

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:

Harry Stahl 26. Mai 2015 20:50

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).

Insider2004 27. Mai 2015 07:19

AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
 
https://msdn.microsoft.com/en-us/lib...ic_dpi_changes

Uwe Raabe 27. Mai 2015 08:02

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: http://www.helpandmanual.com/downloads_delphi.html

newbe 27. Mai 2015 11:37

AW: VCL-Form wird nicht skaliert, obwohl Scaled = True
 
Zitat:

Leider scheint da sehr viel Handarbeit notwendig zu sein
Ja so ist das leider. Mal ne Frage, arbeitet jemand in Professionellen App wirklich mit FireUI? Wie ist das bei Nutzung von Terminalsoftware oder Thinclients? Microsofts Lösung war ja AERO zu streichen. xD Aber mal im Ernst. Sehen die Standard FireUI Komponenten genauso Scheiße aus wie die von WPF?
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

mkinzler 27. Mai 2015 11:40

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.

newbe 27. Mai 2015 12:24

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

Harry Stahl 27. Mai 2015 17:16

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