Home » Tipps & Tricks » System » Systemeinstellungen » Installierte Schriften ermitteln

Installierte Schriften ermitteln

Das TScreen-Objekt enthält eine Liste mit allen installierten Schriften, die auf dem Bildschirm dargestellt werden können:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Listbox1.Items.Assign(Screen.Fonts);
end;

Das bedeutet jedoch nicht, dass jede dieser Schriften auch gedruckt werden kann. Eine entsprechende Liste des aktuellen Druckers enthält das TPrinter-Objekt:

uses
  Printers;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Listbox1.Items.Assign(Printer.Fonts);
end;

Um zusätzlich noch weitere Informationen zu den Fonts zu erhalten, benutzen Sie diese Procedure:

procedure ListFonts(const ACanvas: TCanvas; const ADest: TStrings);
var
  Log: TLogFont;

function _EnumFontFamExProc(EnumLogFontEx: PEnumLogFontEx;
                            NewTextMetric: PNewTextMetric;
                            FontType: Longword;
                            LParam: Longword): integer; stdcall;
begin
  Result := 1;

  TStrings(LParam).Add(StrPas(EnumLogFontEx.elfFullName));
end;

begin
  FillChar(Log, SizeOf(Log), 0);
  Log.lfCharSet := Default_Charset;
  Log.lfFaceName := '';
  Log.lfPitchAndFamily := 0;
  EnumFontFamiliesEx(ACanvas.Handle, Log, @_EnumFontFamExProc, Integer(ADest), 0);
end;

Sie listet zu einem TCanvas alle darstellbaren Fonts auf. Teilweise werden Schriften mehrfach aufgelistet. Es liegt daran, dass eine Schrift in mehreren Sprachen installiert wurde. Weitere Informationen finden Sie in der PSDK unter dem Stichwort „ENUMLOGFONT“.Ein Beispielaufruf sieht so aus:

procedure TForm1.Button1Click(Sender: TObject);
begin
 ListFonts(Canvas, Listbox1.Items);
end;