Einzelnen Beitrag anzeigen

ringli

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

Re: Vista: Systemschriftart ermitteln?

  Alt 6. Sep 2007, 20: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