インストールされていない(Fontフォルダにない)フォントを
使用、表示する方法ってあるんでしょうか?
> インストールされていない(Fontフォルダにない)フォントを
> 使用、表示する方法ってあるんでしょうか?
同じフォントが無い場合、OSが自動的に類似フォントで代用しますので、
インストールされていないフォントが指定されても、一応、
表示は行われますよ。
ただし、代用フォントであるため、元のフォントとは
幾分異なるグリフになりますけれどね。
ちなみにアプリケーションによっては、データファイルにフォントデータを
埋め込んでしまい、それを配布する事で、フォントのインストールされていない環境でも
文字が正しく表示されるようにしてある物もあるようです。
(この手法を使う場合は、フォントの著作権に注意してください)
この手法の場合、埋め込んでおいたフォントは、OSにインストールはされず、
自アプリ上だけで使われるようにしてある事が多いようです。
# CreateScalableFontResource APIで readonly 指定しておいたフォントの場合、
# AddFontResource APIでシステムに追加しても、フォント一覧には列挙されず、
# 自アプリでのみ利用できるフォントとして利用する事ができます。
∋(ФДФ)∈ 魔界の仮面弁士 ∋(ФДФ)∈
># CreateScalableFontResource APIで readonly 指定しておいたフォントの場合、
># AddFontResource APIでシステムに追加しても、フォント一覧には列挙されず、
># 自アプリでのみ利用できるフォントとして利用する事ができます。
上記の手法が自分がやりたかったヤツに近いようです。
ありがとうございます。m(_ _)m
しかし、別の問題が出てしまいました。追加したフォントを
ラベルに設定するのにフォントの名前が必要になってきます。
できればフォントのファイルから取得したいんですが、
うーん、別スレにした方がいいですかね?(^^;)
この方法を利用する場合は、文字列の出力にも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以上でのみ利用できます)
∋(ФДФ)∈ 魔界の仮面弁士 ∋(ФДФ)∈
重ね重ねありがとうございます。勉強になります。m(_ _)m
今回、やろうと思っている処理はアプリケーションに
埋め込むことができなく、任意のフォントファイルを
読み込もうと思ってます。
>実際に文字列を表示するためには、CreateFont(Indirect)、SelectObject、
>(Ext)TextOutなどのAPIを利用します。
CreateFontでフォント名にNULLを指定すると
他の条件にあったフォント名が指定されるんで
ここで確実にフォント名を入れたいところです。
Screen.Fontsの最後に追加されるのを前提として
Screen.Fonts(Screen.FontCount - 1)
あまりいい手段じゃないですかね。
ツイート | ![]() |