![]() |
Textgröße (Windows 11, Barrierefreiheit)
Liebe Gemeinde!
In Windows 11 gibt es zusätzlich zum Zoom eine Einstellung der Textgröße, die von 100%-225% eingestellt werden kann. Wie kan ihc in Delphi auslesen, auf welchem Wert diese Einstellung steht? Konkret: Wir habe in OnMeasureItem Event für TMenuItems, die das Manü anders zeichnet. Liebe Grüße Stefan |
AW: Textgröße (Windows 11, Barrierefreiheit)
Hallo,
habe das mal gefunden:
Code:
Beste Grüße
function GetUserFontPreference(var FaceName: string; var PixelHeight: Integer): Boolean;
var lf: LOGFONT; begin ZeroMemory(@lf, SizeOf(lf)); if SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(lf), @lf, 0) then begin FaceName:=PChar(Addr(lf.lfFaceName[0])); PixelHeight:=lf.lfHeight; result:=True; end else result:=False; end; // procedure TForm1.FormCreate(Sender: TObject); var FontHeight: Integer; FontFace: string; begin if GetUserFontPreference(FontFace, FontHeight) then begin Font.Name:=FontFace; Font.Height:=FontHeight; end; end; |
AW: Textgröße (Windows 11, Barrierefreiheit)
Falls Du Interesse hast von einem graphischen Objekt die gebrauchten Dimensionen auf dem Bildschirm zu erfahren, so mache ich das:
Delphi-Quellcode:
Die Argumente kurz erklärt:
function GetFontSize(const AText: String; const AFont: TFont; out AWidth, AHeight: Integer): Boolean;
var LBMP: TBitmap; begin Result := False; AWidth := 0; AHeight := 0; LBMP := TBitmap.Create; try LBMP.Canvas.Font.Assign(AFont); AWidth := LBMP.Canvas.TextWidth(AText); AHeight := LBMP.Canvas.TextHeight(AText); Result := ((AWidth <> 0) or (AHeight <> 0)); finally LBMP.Free; end; end; - AText = dein string von dem Du die Dimensionen benötigst - AFont = deine verwendete Font - AWidth = Rückgabe der Breite - AHeight = Rückgabe der Höhe LG, KodeZwerg. |
AW: Textgröße (Windows 11, Barrierefreiheit)
Zitat:
|
AW: Textgröße (Windows 11, Barrierefreiheit)
Falls du nicht die Fontgröße, sondern die eingestellte Skalierung (bei mir z.B. 175) wissen willst, hilft vielleicht so etwas:
Delphi-Quellcode:
Voraussetzung dafür ist, dass die Anwendung DPI aware ist (Projektoptionen, Anwendung, Manifest).
function GetFontScaling(Handle: THandle): Integer;
begin var Monitor := Screen.MonitorFromWindow(Handle); { var Monitor := Screen.MonitorFromPoint(Pnt); var Monitor := Screen.MonitorFromRect(Rect); } Result := Round(Monitor.PixelsPerInch*100/96); end; Gruß G. |
AW: Textgröße (Windows 11, Barrierefreiheit)
Danke für eure Antworten, ich schau mir mal IconFont an.
[...] Es ist noch einfacher. Die FontSize, die an der fraglichen Stelle daherkommt, ist bereits so skaliert, wie sie sein sollte. LKeider berechnet Delphi 11 in CreateMessageForm die Breiten von Popup-Messages anders, als in D10, sodass Texte, die sich bisher bei STandardeinstellungen gut ausgingen, plötzlich blöd umbrechen. Aber das ist ein anderes Thema :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 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