列出可用的GDI+;Delphi 2009 win32中的字体

列出可用的GDI+;Delphi 2009 win32中的字体,delphi,fonts,gdi+,delphi-2009,Delphi,Fonts,Gdi+,Delphi 2009,在使用win32的Delphi 2009中,如何获得系统上可用的GDI+字体列表 补充问题:是否有一个字体对话框可以向用户显示这种字体?如果可以在Lazerous中使用相同的方法,则可获得额外积分。您应列举系统中的所有字体: procedure TPDFFontMapper.EnumFonts; var LF: TLogFont; begin System.FillChar(LF, sizeof(LF), 0); LF.lfCharSet := DEFAULT_CHARSET;

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


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

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

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字体):


什么是GDI+字体?你能解释一下吗?我知道TrueType、Type1和OpenType字体。如果您需要这些,我可以提供一段代码。本例中的字体由GDI+在dxscene中渲染。但只支持GDI+可以呈现的字体——我想知道如何识别这些字体
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;