![]() |
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 ![]() |
Re: Vista: Systemschriftart ermitteln?
Hat keiner eine Idee? :(
|
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 |
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.
|
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:
Ciao, Frederic |
Re: Vista: Systemschriftart ermitteln?
Wie wäre es mit dem offiziellen Weg über die Abfrage mittels SystemParametersInfo?
|
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 ![]() 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; |
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:
Das liefert "MS Shell Dlg" zurück, was dann bei XP "Tahoma" entspricht.
var
FLogFont: TLogFont; begin GetObject(GetStockObject(DEFAULT_GUI_FONT), sizeof(FLogFont), @FLogFont); |
Re: Vista: Systemschriftart ermitteln?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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:
Und im Anhang dazu der passende Screenshot für Leute die kein Vista haben. Der Unterschied müsste deutlich zu sehen sein.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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 by Thomas Breitkreuz