2010-03-06 9 views
0

Dans Delphi 2009 en utilisant win32, comment obtenir une liste de polices GDI + disponibles sur le système?Liste des polices GDI + disponibles dans Delphi 2009 win32

question supplémentaire: est-il une boîte de dialogue de police disponible qui peut montrer que ce cela des polices à l'utilisateur? Points bonus si la même méthode peut être utilisée dans Lazerous.

+0

Que sont les polices GDI +? Pourriez-vous expliquer s'il vous plaît? Je connais les polices TrueType, Type1 et OpenType. Si vous voulez ceux-ci, je peux vous fournir un morceau de code. –

+0

La police dans ce cas est rendue dans dxscene par GDI +. Mais seules les polices qui peuvent être rendues par GDI + sont supportées - je veux savoir comment les identifier – Cruachan

Répondre

1

Vous devez énumérer toutes les polices dans le système:

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; 

Vous devriez avoir une fonction qui est appelée pour chaque police et tester si elle est une police vectorielle (les deux polices TrueType et OpenType sont considérés comme des polices 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;