AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vista: Systemschriftart ermitteln?

Ein Thema von ringli · begonnen am 21. Aug 2007 · letzter Beitrag vom 6. Sep 2007
Antwort Antwort
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#1

Vista: Systemschriftart ermitteln?

  Alt 21. Aug 2007, 07:10
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.
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Vista: Systemschriftart ermitteln?

  Alt 22. Aug 2007, 12:36
Hat keiner eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Vista: Systemschriftart ermitteln?

  Alt 22. Aug 2007, 12:50
Hi!

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

Wie sieht denn dein Quellcode aus?!


Ciao, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Vista: Systemschriftart ermitteln?

  Alt 22. Aug 2007, 12:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: Vista: Systemschriftart ermitteln?

  Alt 22. Aug 2007, 13:05
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
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Vista: Systemschriftart ermitteln?

  Alt 22. Aug 2007, 13:29
Wie wäre es mit dem offiziellen Weg über die Abfrage mittels SystemParametersInfo?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Vista: Systemschriftart ermitteln?

  Alt 22. Aug 2007, 13:37
Ö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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Vista: Systemschriftart ermitteln?

  Alt 6. Sep 2007, 12:35
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Vista: Systemschriftart ermitteln?

  Alt 6. Sep 2007, 21:18
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.
Miniaturansicht angehängter Grafiken
systemschriftart_vista_194.png  
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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