お知らせ

電子会議

ライブラリ

FDelphi サイト全文検索

Delphi FAQ一覧

サンプル蔵



FDelphi FAQ
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編纂委員会