|
15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
現在インストールされているフォントはScreen.Fontsで得えられますが、
TrueTypeフォントをだけを取得するにはどうしたらいいのでしょう。
[A]
TTextMetricのtmPichAndFamilyに関連する情報が入っているので、
TrueTypeの定数TMPF_TRUETYPEとandをとった値が0でなければTrueTypeフォントです。
if (TextMetric.tmPichAndFamily and TMPF_TRUETYPE)>0 then ....
またTextMetricを得るにはEnumFonts,EnumFontFamilies等を使います。
[例]
procedure GetTrueType(FontList:TStrings;Sort,VertFlag:Boolean);
var FFonts:TStringlist;
DC:HDC;
function FontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric;
FontType: Integer; Data: Pointer): Integer; stdcall;
begin
if (TextMetric.tmPitchAndfamily and TMPF_TRUETYPE)>0 then
if LogFont.lfFaceName[0]<>'@'
then TStrings(Data).Add(LogFont.lfFaceName);
Result := 1;
end;
function FontsProcVert(var LogFont: TLogFont; var TextMetric: TTextMetric;
FontType: Integer; Data: Pointer): Integer; stdcall;
begin
if (TextMetric.tmPitchAndfamily and TMPF_TRUETYPE)>0
then TStrings(Data).Add(LogFont.lfFaceName);
Result := 1;
end;
begin
DC:=GetDC(0);
try
FFonts:=TStringList.Create;
FFonts.Sorted:=Sort;
try
if VertFlag then EnumFonts(DC, nil, @FontsProcVert, Pointer(FFonts))
else EnumFonts(DC, nil, @FontsProc, Pointer(FFonts));
FontList.Assign(FFonts);
finally
FFonts.Free;
end;
finally
ReleaseDC(0,DC);
end;
end;
上記のコードはTrueTypeフォントを取得する汎用の手続きです。
おおよそ10-100ミリ秒で取得出来ます。
呼び出し方の例ですが、例えばListBox1に全てのTrueTypeフォントを表示する場合
GetTrueType(ListBox1.Items,False,True);
とします、尚、三番目の引数をTrueにすると、リストはソートされます
最後の引数は縦書きフォントを取得するかどうかです、取得するならTrueを渡します。
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|