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/)
-   -   Delphi Vista: Systemschriftart ermitteln? (https://www.delphipraxis.net/98077-vista-systemschriftart-ermitteln.html)

ringli 21. Aug 2007 06:10


Vista: Systemschriftart ermitteln?
 
Weiß jemand zufällig wie man den aktuell verwendeten Systemfont ermitteln kann?

Bis einschliesslich Windows XP funktionierte ja der Alias "MS Shell Dlg" hervorragend, aber unter Vista wird hier leider auch nur "Tahoma" als Schriftart zurückgegeben was natürlich falsch ist. Bei Non-VCL Programmen bzw. C++ scheint es ja diese Möglichkeit zu geben um den "MS Shell Dlg"-Alias weiter verwenden zu können.

ringli 22. Aug 2007 11:36

Re: Vista: Systemschriftart ermitteln?
 
Hat keiner eine Idee? :(

fkerber 22. Aug 2007 11:50

Re: Vista: Systemschriftart ermitteln?
 
Hi!

Was verstehst du denn unter "zurück geliefert" und in wie fern ist Tahoma falsch?

Wie sieht denn dein Quellcode aus?!


Ciao, Frederic

ringli 22. Aug 2007 11:55

Re: Vista: Systemschriftart ermitteln?
 
Da ich jetzt grade nicht zuhause bin kann ich dir leider erst heute abend Quelltext liefern, aber Tahoma ist insofern falsch weil unter Vista die Systemschriftart normalerweise "Segoe UI" ist und nicht mehr "Tahoma" wie es bei Windows XP der Fall ist.

fkerber 22. Aug 2007 12:05

Re: Vista: Systemschriftart ermitteln?
 
Hi!

Aha...

Also unter dem genannten Schlüssel steht tatsächlich immer noch Tahoma...

Einzig was mir sonst noch in der Registry begegnet ist:

Zitat:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink\Segoe UI

TAHOMA.TTF
MEIRYO.TTC,Meiryo,128,85
MEIRYO.TTC,Meiryo
MSGOTHIC.TTC,MS UI Gothic
MSJH.TTF,128,96
MSJH.TTF
MSYH.TTF,128,96
MSYH.TTF
MALGUN.TTF,128,96
MALGUN.TTF
Ob man damit was anfangen kann?!

Ciao, Frederic

Bernhard Geyer 22. Aug 2007 12:29

Re: Vista: Systemschriftart ermitteln?
 
Wie wäre es mit dem offiziellen Weg über die Abfrage mittels SystemParametersInfo?

ringli 22. Aug 2007 12:37

Re: Vista: Systemschriftart ermitteln?
 
Öhm... und wie funktioniert das dann? Hast du vielleicht einen Codeschnipsel für mich?

[EDIT]
Der Tip mit SystemParametersInfo war goldrichtig. :) Nach ein wenig googlen habe ich das hier gefunden.

Der Code sieht also folgendermassen aus:
Delphi-Quellcode:
procedure GetSystemFont(aFont: TFont);
var
  ncMetrics: TNonClientMetrics;
begin
  Assert(Assigned(aFont));
  ncMetrics.cbSize := SizeOf(TNonClientMetrics);
  SystemParametersInfo(SPI_GETNONCLIENTMETRICS,
                       SizeOf(TNonClientMetrics),
                       @ncMetrics, 0);
  aFont.Handle := CreateFontIndirect(ncMetrics.lfMenuFont);
end;

Luckie 6. Sep 2007 11:35

Re: Vista: Systemschriftart ermitteln?
 
Das muss aber nicht die Systemschrift sein. Der Benutzer kann diese ja nach belieben ändern in dem Dialog: Eigenschaften von Anzeige -> Darstellung -> Erweitert. Also so ganz ist das nicht die Lösung. Und warum hast du lfMenuFont genommen und nicht lfCaptionFont zum Beispiel?

Die standard Systemschrift ermittelt man mit
Delphi-Quellcode:
var
  FLogFont: TLogFont;
begin
  GetObject(GetStockObject(DEFAULT_GUI_FONT), sizeof(FLogFont), @FLogFont);
Das liefert "MS Shell Dlg" zurück, was dann bei XP "Tahoma" entspricht.

ringli 6. Sep 2007 20:18

Re: Vista: Systemschriftart ermitteln?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luckie
Das muss aber nicht die Systemschrift sein. Der Benutzer kann diese ja nach belieben ändern in dem Dialog: Eigenschaften von Anzeige -> Darstellung -> Erweitert. Also so ganz ist das nicht die Lösung. Und warum hast du lfMenuFont genommen und nicht lfCaptionFont zum Beispiel?

Die standard Systemschrift ermittelt man mit
Delphi-Quellcode:
var
  FLogFont: TLogFont;
begin
  GetObject(GetStockObject(DEFAULT_GUI_FONT), sizeof(FLogFont), @FLogFont);
Das liefert "MS Shell Dlg" zurück, was dann bei XP "Tahoma" entspricht.

Genau das ist das Problem Luckie. "MS Shell Dlg" gibt unter Vista eben nicht mehr die richtige Systemschriftart zurück. Damit wird unter Vista auch Tahoma zurückgegeben und nicht "Segoe UI" was korrekt wäre.

lfMenuFont habe ich genommen weil ich mir gedacht habe das der Menüfont für Buttons usw. sinniger ist als der Captionfont der ja (meistens) etwas größer eingestellt ist als der Menüfont. Sonst hatte das keinen besonderen Grund. Mir wäre eine Lösung wie die deine auch lieber, aber wie gesagt deine Funktion gibt halt leider die falsche Systemschriftart zurück.

[EDIT]
Mal ein kleiner Beispielcode:
Delphi-Quellcode:
procedure GetSystemFont(aFont: TFont);
var
  ncMetrics: TNonClientMetrics;
begin
  Assert(Assigned(aFont));
  ncMetrics.cbSize := SizeOf(TNonClientMetrics);
  SystemParametersInfo(SPI_GETNONCLIENTMETRICS,
                       SizeOf(TNonClientMetrics),
                       @ncMetrics, 0);
  aFont.Handle := CreateFontIndirect(ncMetrics.lfMenuFont);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  FLogFont: TLogFont;
begin
  GetObject(GetStockObject(DEFAULT_GUI_FONT), sizeof(FLogFont), @FLogFont);

  label1.Font.Name := FLogFont.lfFaceName;
  label1.Font.Size := FLogFont.lfHeight;
  label1.Caption  := 'Dies ist die Schriftart "' + FLogFont.lfFaceName + '" unter Vista.';

  GetSystemFont(label2.Font);
  label2.Caption  := 'Dies ist die Schriftart "' + label2.Font.Name + '" unter Vista.';
end;
Und im Anhang dazu der passende Screenshot für Leute die kein Vista haben. Der Unterschied müsste deutlich zu sehen sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 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