代码之家  ›  专栏  ›  技术社区  ›  Cruachan

列出Delphi2009win32中可用的GDI+字体

  •  0
  • Cruachan  · 技术社区  · 15 年前

    在使用win32的delphi 2009中,如何获得系统上可用的gdi+字体列表?

    补充问题:是否有一个字体对话框可以向用户显示这些字体?如果相同的方法可以在lazerous中使用,则可以获得加分。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Ritsaert Hornstra    15 年前

    您应该枚举系统中的所有字体:

    procedure TPDFFontMapper.EnumFonts;
    var
      LF: TLogFont;
    begin
      System.FillChar(LF, sizeof(LF), 0);
      LF.lfCharSet := DEFAULT_CHARSET;
      FDC := CreateCompatibleDC(0);
      try
        Windows.EnumFontFamiliesEx(FDC, LF, @EnumFFProc, Integer(Self), 0);
      finally
        Windows.DeleteDC(FDC);
      end;
    end;
    

    您应该有一个为每个字体调用的函数,并测试它是否是矢量字体(TrueType和OpenType字体都被视为TrueType字体):

    function EnumFFProc(const LogFont: TEnumLogFontEx; const TextMetric: TNewTextMetric; FontType: DWORD; LParam: DWORD): Integer; stdcall;
    begin
      if FontType and TRUETYPE_FONTTYPE = TRUETYPE_FONTTYPE then
        // do sometghing useful with the logfont...
      Result := 1;
    end;