Klopt, had ik ook gelezen, maar ik krijg het met mijn huidige kennis nog niet voor elkaar. Wat ik als voorbeeld heb gevonden (dank google) is:
Code:
function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric;
FontType: Integer; Data: Pointer): Integer; stdcall;
var
S: TStrings;
Temp: string;
begin
S := TStrings(Data);
Temp := LogFont.lfFaceName;
if (S.Count = 0) or (AnsiCompareText(S[S.Count-1], Temp) <> 0) then
S.Add(Temp);
Result := 1;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
DC: HDC;
LFont: TLogFont;
MyFonts: TStrings;
begin
MyFonts := TStringList.Create;
DC := GetDC(0);
try
FillChar(LFont, sizeof(LFont), 0);
LFont.lfCharset := DEFAULT_CHARSET;
EnumFontFamiliesEx(DC, LFont, @EnumFontsProc, Winapi.Windows.LPARAM(MyFonts), 0);
TStringList(MyFonts).Sorted := TRUE;
finally
ReleaseDC(0, DC);
end;
ListBox1.Items.Assign(MyFonts);
MyFonts.Free;
end;
Bovenstaande code maakt alleen gebruik van lfFaceName, nog niet van lfItalic of lfUnderline.
Een font als "Book Antiqua" (standaard Windows ?) komt nu terug als "Book Antiqua" maar bestaat eigenlijk uit "Book Antiqua Bold", "Book Antiqua Bold Italic", "Book Antiqua Italic" en "Book Antiqua Regular".
Wat zijn de benodigde aanpassingen om alle vier de benamingen als resultaat terug te krijgen? Vermoedelijk is Bold een onderdeel van lfWeight (FW_Bold)?
Bookmarks