Top > プログラミング > .NET Tips> システムにインストールされていないフォントを使用する

システムにインストールされていないフォントを使用する」への評価、コメント

評価

良い / 悪い = 9 / 0 (「良い」の割合 = 1.000 , 人気度 = 0.954

評価する

コメント一覧


通常のコメント
匿名 2024/11/21 (Thu) 21:16:09
この方法でフォントを埋め込むとフォントの画質がかなり荒くなり、ガサガサになるのですがこれはもう仕方ない事なのでしょうか?正直利用したくないくらい汚いのできれいに表示できる方法があればどなたかご教示いただきたいです。

通常のコメント
匿名 2024/11/20 (Wed) 13:50:35
さとっくすさん
遅くなりすいません!ご回答ありがとうございます!
おっしゃる通りフォームを閉じるまで保持していればエラーは起きませんでした!ありがとうございました!

通常のコメント
さとっくす 2024/03/22 (Fri) 15:27:06
>System.AccessViolationException: '保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。'

恐らく、フォントの実体がMarshal.FreeCoTaskMem(fontBufPtr)にて解放されているのが原因で例外などの問題が起きているかと思います。
アプリ終了までポインタを保持するように修正する限りは問題は起きないようです。
(数個のコントロールでメモリフォントを共有しても問題なし)

通常のコメント
オショウ京都 2024/01/26 (Fri) 14:43:33
2024年01月配信のWindowsUpdateか、Visual Studio 2022 Pro でのアップデータか
解っておりませんが、正常に動作しなくなりました。
解決方法としては、AddFontMemResourceEx か、AddFontResourceEx を使う方法に
なるですが、これでも完全ではありませんでした。
使い方(フォントの使いまわし)で、読み込んだフォントを複数のコントロール
のフォント設定に代入しているのですが、1個目は大丈夫ですが、2個目以降は
反映されませんでした。

デバッグで見ると、『指定されたパラメータが正しくありません』(フォント名)
となっていました。

使いまわしができない?となった場合、必要な分、追加確保して行うことになる
のか???と思いましたが、では、解放時、
RemoveFontMemResourceEx
RemoveFontResourceEx
を複数回呼び出すのか???

どうも違うような・・・

100%正解な方法を見つけていません。

適切な方法としてはどうすればよいのか。
お教え願えればと思います。

以上。

通常のコメント
mmk 2023/12/10 (Sun) 07:58:30
いつも参考にさせていただいています。

フォントファイルを読み込む方法も、リソースを読み込む方法も試しましたが、
フォント変更までの処理自体は成功するのですが、フォームを立ち上げてすぐに以下の例外が出てしまいます。

▼例外
System.AccessViolationException: '保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。'

こちらの解決方法をわかる方いらしたらコメントいただけると幸いです。

通常のコメント
匿名 2022/12/23 (Fri) 18:42:33
私の環境では
new Font(pfc.Families[0], 10F);
ではなく
new Font(pfc.Families[0].Name, 10F);
にしないとlabelにテキストを設定しようとすると「System.ArgumentException: '使用されたパラメーターが有効ではありません。'」が出ます

通常のコメント
DM 2020/04/15 (Wed) 16:37:22
こんにちは。
”OpenTypeフォントは制限付きでしかサポートしていません。”
とのことですが、どのような制限があるかご存じでしたら教えていただけないでしょうか?

通常のコメント
管理人 2016/05/3 (Tue) 01:04:51
ご報告が遅れましたが、TextBoxコントロールでメモリフォントを使用する方法を追記しました。コメント、ありがとうございました。

通常のコメント
tty 2015/08/21 (Fri) 09:43:41
マツーさんとは異なる話になりますが、
TextBox にリソースに埋め込んだフォントを適用してもフォントの表示を変更することはできませんでした。
TextBox にない UseCompatibleTextRendering プロパティの代わりに Application.SetCompatibleTextRenderingDefault(true) を使用しました。
メモリフォントはGDI+で描画しなければなりませんが、 TextBox は GDI+ を使用できないのかもしれません。

https://msdn.microsoft.com/ja-jp/library/system.drawing.text.privatefontcollection.addmemoryfont(v=vs.110).aspx

> GDI+ では描画できないコントロールもあります。

代替として、 Bitmap などに Graphics.DrawString で描画して PictureBox.Image に渡して表示することはできました。

通常のコメント
管理人 2015/06/24 (Wed) 00:43:54
> labelのフォントをプライベートフォントに変更することができたのですがtextBoxのフォントを変更するにはどうしたらよいのでしょうか?

私が試した限りでは、テキストボックスコントロールでもこの方法でフォントを変更することができました。

通常のコメント
マツー 2015/05/14 (Thu) 00:48:18
いつもサイトを参考にさせていただき大変助かっています。この記事のおかげでlabelのフォントをプライベートフォントに変更することができたのですがtextBoxのフォントを変更するにはどうしたらよいのでしょうか?

label1.Font = f;
textBox1.Font = f;

のようにしてもFontのフォルダにttfファイルがないとフォントが変更されないので困っています。

コメントの投稿

[説明]