![]() |
PerMonitor Aware und Fonts: wie richtig machen?
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Delphi XE 11.1: wie handhabt ihr eigentlich das Font-Handling, wenn die Anwendung PerMonitor-Aware laufen soll und mit der Fontgröße gerechnet werden muß? Folgendes Problem: * 2 Monitore: Primärer 200% Skalierung, Sekundärer 100% Skalierung * Anwendung via Explorer platziert auf Primärem starten, dann ein zweites Mal via Explorer platziert auf Sekundärem Monitor * Ergebnis: unterschiedliche Darstellungen und Werte (siehe Bild im Anhang) Die Anwendung selbst ist eigentlich sehr einfach: * leere Anwendung * TMemo und TLabel drauf platzieren * Font der Form auf Tahoma / 8 stellen * folgenden FormCreate Handler einhängen:
Delphi-Quellcode:
mit
procedure TForm1.FormCreate(Sender: TObject);
begin LogFont; // key point 1: form changes font on FormCreate Font.Name := 'Segoe UI'; Font.Size := 9; LogFont; // key point 2: move form to secondary monitor to enforce scaling if Screen.MonitorCount > 1 then Left := Screen.Monitors[1].Left + 1; LogFont; end;
Delphi-Quellcode:
Wenn ich mir die VCL Sourcen so ansehe und mit dem obigen Resultaten vergleiche: man darf eigentlich nirgens mehr mit der Font.Size arbeiten, denn diese liefert eventuell "falsche" Ergebnisse, da sie ja immer auf FontHöhe und PixelsPerInch den Wert berechnet.
procedure TForm1.LogFont;
begin memo1.lines.add(Format('Font.Size: %d; Font.PPI: %d, Font.Height: %d', [Font.Size, Font.PixelsPerInch, Font.Height])); end; Sollte man das als Bug in der VCL ansehen oder generell jegliche Berechnung/Änderung mit Font.Size immer vermeiden? |
AW: PerMonitor Aware und Fonts: wie richtig machen?
Meiner Meinung nach hat man das Font-Scaling falsch angefangen. Anstatt die Font.Size invariant zu halten und sich einfach mittels Font.PixelsPerInch auf die jeweilige Skalierung des Monitors einzustellen. Wird Font.PixelsPerInch einmalig gesetzt (anhand des Primären Monitors) und danach immer Font.Height skaliert. Ich hoffe, das kommt nochmal auf die Agenda und wird in einer zukünftigen Version revidiert.
Als Folge davon muss die Zuweisung
Delphi-Quellcode:
schon die aktuelle Skalierung berücksichtigen:
Font.Size := 9
Delphi-Quellcode:
Font.Size := MulDiv(9, CurrentPPI, Font.PixelsPerInch);
|
AW: PerMonitor Aware und Fonts: wie richtig machen?
Vielen Dank! :thumb:
|
AW: PerMonitor Aware und Fonts: wie richtig machen?
Zitat:
Dann könnte ich dafür stimmen... |
AW: PerMonitor Aware und Fonts: wie richtig machen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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