Visueller Fehler in der Windows-Titelleiste mit aktivierter VCL-Formatvorlage und Skalierung der Anzeige

8

Momentan teste ich verschiedene Aspekte von VCL-Styles-fähigen Anwendungen.

Ich habe festgestellt, dass bei Windows-Skalierung höher als die Standard 96 dpi / 100%, Das Symbol und der Titelbalken-Text des VCL-Formulars sind zu groß - und beide sind zu nahe zusammen -, siehe beigefügte Screenshots. Dies gilt insbesondere für höhere Skalierungen wie 200% oder 250% (z. B. für 4K-Bildschirme und Windows 10), aber selbst bei einer Skalierung von 144 dpi / 150% ist das Problem bereits sichtbar.

Dies gilt für alle mit RAD Studio gelieferten Stile. Die hohe DPI-Awareness für Manifest wird über Projekteinstellungen aktiviert. Wenn ich VCL-Styles in der App deaktiviere, ist der Text der Icon- und Titelleiste in der Größe korrekt.

Fehle ich hier etwas? Sollten die mitgelieferten Styles ohne solche Display-Fehler nicht funktionieren, wenn die Display-Skalierung aktiviert ist? Oder gibt es irgendwo Einstellungen, die ich anpassen kann, um das Problem zu beheben?

Danke,

    
Tom Major 19.12.2016, 18:49
quelle

3 Antworten

2

Ok, hier ist meine Lösung für die visuellen Fehler, bitte sehen Sie sich die beigefügten Screenshots an. Ich habe an 3 Stellen in Vcl.Forms.pas Korrekturen vorgenommen.

Der erste Fix, der mit // Titelleiste fix 1 kommentiert wurde, behebt das Problem, dass das Symbol auch ohne Skalierung auf einem Standard 96dpi Windows mit einer VCL-gestylten Anwendung nicht korrekt gezeichnet wurde. Ich könnte dies auf der Grundlage der Erkenntnisse über WM_GETICON, ICON_SMALL2, von James Johnston beheben, Ссылка Danke, James, dafür!

Die beiden anderen Fixes behandeln das Problem, dass das Symbol zu groß gezeichnet wird, wenn die Anzeigeskalierung aktiviert ist und der Abstand zwischen dem Symbol und dem Text der Titelleiste zu klein ist. Dies sind die Fixes, die mit // Titelleiste Fix 2 und 3 im Code kommentiert wurden. GetDpi ist nur ein Getter für den aktuellen dpi-Wert, den ich von meinen C-Quellen innerhalb der Anwendung bekomme.

Das Ergebnis ist in keiner Weise perfekt, aber es wird vorerst ausreichen, damit die VCL-gestylte Anwendung unter skalierten Umständen zumindest akzeptabel ist.

Danke an alle für Ihre Eingabe.

    
Tom Major 28.12.2016, 22:33
quelle
10

VCL-Styles unterstützen keine hohe DPI-Skalierung.

Wenn Sie VCL-Stile verwenden, sollten Sie die hohe DPI-Erkennung aus Ihrem Anwendungsmanifest entfernen.

QP-Bericht, der allgemeine Unterstützung für hohe DPI für VCL-Stile anfordert: VCL-Stile werden bei Konfigurationen mit hohem DPI nicht richtig skaliert

Zugehöriger QC-Bericht für den NC-Bereich: Nicht-Client-Bereich des gestylten Formulars wurde unter hoher DPI-Skalierung falsch skaliert

    
Dalija Prasnikar 19.12.2016 18:56
quelle
0

Hier ist eine Einheit, die VCL-Stile in DPI-fähigen Anwendungen ermöglicht.

VCL.Styles.DPIAware.pas

Um das Gerät zu verwenden, fügen Sie es einfach zur implementations uses-Anweisung des Hauptformulars hinzu und fügen Sie dem FormCreate-Handler den folgenden Code hinzu:

%Vor%

Standardmäßig skaliert die Komponente die Stile auf ein Vielfaches von 100%. Sie können das ändern, indem Sie die Zeile hinzufügen:

%Vor%

Mit dieser Anweisung werden Stile für alle Skalierungsfaktoren für Screen.PixelsPerInch skaliert. Die meisten Stile würden gut funktionieren, aber einige zeigen möglicherweise einige visuelle Defekte.

    
PyScripter 13.11.2017 14:29
quelle

Tags und Links