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/)
-   -   Textgröße (Windows 11, Barrierefreiheit) (https://www.delphipraxis.net/213580-textgroesse-windows-11-barrierefreiheit.html)

looseleaf 21. Aug 2023 15:19

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

tomkupitz 22. Aug 2023 08:17

AW: Textgröße (Windows 11, Barrierefreiheit)
 
Hallo,

habe das mal gefunden:

Code:
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;
Beste Grüße

KodeZwerg 22. Aug 2023 08:45

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:
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;
Die Argumente kurz erklärt:
- 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.

Frickler 22. Aug 2023 08:51

AW: Textgröße (Windows 11, Barrierefreiheit)
 
Zitat:

Zitat von tomkupitz (Beitrag 1525954)
Hallo,
habe das mal gefunden:
Beste Grüße

Delphi ermittelt das selbst in TScreen und speichert es in der Property IconFont.

Aliquis 22. Aug 2023 10:54

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:
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;
Voraussetzung dafür ist, dass die Anwendung DPI aware ist (Projektoptionen, Anwendung, Manifest).

Gruß G.

looseleaf 23. Aug 2023 15:33

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 00:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz