インストールされていないフォントを使用するには?


YOSHIYUKI  URL  2003-05-15 23:50:54  No: 77950

インストールされていない(Fontフォルダにない)フォントを
使用、表示する方法ってあるんでしょうか?


魔界の仮面弁士  2003-05-16 00:40:24  No: 77951

>   インストールされていない(Fontフォルダにない)フォントを
> 使用、表示する方法ってあるんでしょうか?

同じフォントが無い場合、OSが自動的に類似フォントで代用しますので、
インストールされていないフォントが指定されても、一応、
表示は行われますよ。

ただし、代用フォントであるため、元のフォントとは
幾分異なるグリフになりますけれどね。


魔界の仮面弁士  2003-05-16 00:46:29  No: 77952

ちなみにアプリケーションによっては、データファイルにフォントデータを
埋め込んでしまい、それを配布する事で、フォントのインストールされていない環境でも
文字が正しく表示されるようにしてある物もあるようです。
(この手法を使う場合は、フォントの著作権に注意してください)

この手法の場合、埋め込んでおいたフォントは、OSにインストールはされず、
自アプリ上だけで使われるようにしてある事が多いようです。
# CreateScalableFontResource APIで readonly 指定しておいたフォントの場合、
# AddFontResource APIでシステムに追加しても、フォント一覧には列挙されず、
# 自アプリでのみ利用できるフォントとして利用する事ができます。


YOSHIYUKI  URL  2003-05-16 02:31:02  No: 77953

∋(ФДФ)∈ 魔界の仮面弁士 ∋(ФДФ)∈
># CreateScalableFontResource APIで readonly 指定しておいたフォントの場合、
># AddFontResource APIでシステムに追加しても、フォント一覧には列挙されず、
># 自アプリでのみ利用できるフォントとして利用する事ができます。

  上記の手法が自分がやりたかったヤツに近いようです。
ありがとうございます。m(_ _)m
  しかし、別の問題が出てしまいました。追加したフォントを
ラベルに設定するのにフォントの名前が必要になってきます。
できればフォントのファイルから取得したいんですが、
うーん、別スレにした方がいいですかね?(^^;)


魔界の仮面弁士  2003-05-16 03:38:43  No: 77954

この方法を利用する場合は、文字列の出力にもAPIを使う必要があります。

流れとしては、まず、埋め込み用フォントデータを取得するために、
フォントのある環境で、GetFontData APIを呼び出します。これにより、
hDCからTTFデータを取得できます。

フォントデータを再現する場合は、CreateScalableFontResource APIを
使って、先のTTFファイルを、フォントリソース(FOTファイル)に変換します。
(この時、第1引数fdwHiddenに1を指定して、フォント名が列挙されないようにしておきます。)

さらに、AddFontResource APIにて、作成したFOTファイルをシステムに
登録します。これで準備完了です。

実際に文字列を表示するためには、CreateFont(Indirect)、SelectObject、
(Ext)TextOutなどのAPIを利用します。

なお、AddFontResource で登録したフォントは、RemoveFontResource APIで、
忘れずに削除して下さい。(FOTファイル等の一時ファイルの削除も忘れずに)

ちなみに、列挙不能フォントの生成には、AddFontResourceEx APIを
利用する事もできます。使い勝手としては、こちらの方が楽でしょう。
(AddFontResourceEx APIは、Win2000以上でのみ利用できます)


YOSHIYUKI  URL  2003-05-17 01:09:18  No: 77955

∋(ФДФ)∈ 魔界の仮面弁士 ∋(ФДФ)∈
  重ね重ねありがとうございます。勉強になります。m(_ _)m
今回、やろうと思っている処理はアプリケーションに
埋め込むことができなく、任意のフォントファイルを
読み込もうと思ってます。

>実際に文字列を表示するためには、CreateFont(Indirect)、SelectObject、
>(Ext)TextOutなどのAPIを利用します。

  CreateFontでフォント名にNULLを指定すると
他の条件にあったフォント名が指定されるんで
ここで確実にフォント名を入れたいところです。
Screen.Fontsの最後に追加されるのを前提として

Screen.Fonts(Screen.FontCount - 1)

あまりいい手段じゃないですかね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加