[対象バージョン]
Delphi 2.0J
[説明]
Delphiでシステムに登録されている日本語用フォントの一覧を取得します。
[対処法]
アプリケーションが用意するコールバック関数の内部から、列挙されるフォントの属性を参照できます。
LOGFONT 構造体と TEXTMETRIC 構造体には共通する部分もあります。
LOGFONT 構造体には文字セットを示す lfCharSet フィールドがあります。 この値を調べることで、列
挙されたフォントの文字セットが日本語かどうか判別できます。
ANSI_CHARSET 0
DEFAULT_CHARSET 1
SYMBOL_CHARSET 2
SHIFTJIS_CHARSET $80 (シフトJIS文字セット) ・ ・また、可変ピッチかどうかを知るには lfPitchAndFamily の下位4ビットを調べます。
DEFAULT_PITCH 0 FIXED_PITCH 1 (固定ピッチ)
VARIABLE_PITCH 2 (可変ピッチ)
[サンプルソース]
{コールバック関数} function EnumFamToLines(lplf: PLOGFONT; lpntm: PNEWTEXTMETRIC; FontType: DWORD; Lines: LPARAM): Integer; stdcall; begin {シフトJIS文字セットで固定ピッチのフォントを列挙} with lplf^ do if (lfCharSet = SHIFTJIS_CHARSET) and (lfPitchAndFamily and $0F = FIXED_PITCH) then TStrings(Lines).Add(lplf.lfFaceName); Result := 1; end; {ボタンを押すとメモにフォントを列挙します} procedure TForm1.Button1Click(Sender: TObject); begin EnumFontFamilies(Canvas.Handle, nil, @EnumFamToLines, LongInt(Memo1.Lines)); end;
追記:
日本語フォント名には“@”プレフィックスがついたものがあります。
これは同じフォントでも向きが違うもののようですが、LOGFONT 構造体や
TEXTMETRIC 構造体の他のフィールドとどう関連付けられているのかは分か
りません(lfFaceName を調べると検出できます)。