- ベストアンサー
C#のビルド方法について教えてください。
- C#初心者の方が、プライベートフォントのファイル(ttfファイル)をAddFontFileで取り込み、ビルドする方法について教えてください。
- デバッグ中は、C empの下にttfファイルを置くことで正常に動作するのですが、ビルドしてもうまく動作しないため、ttfファイルをビルドに含める方法を知りたいです。
- フォントをインストールする手間を避けたいため、ファイルを置く方法以外でビルドできる方法があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
テキストボックスじゃ反映されないみたいですね。(フォントの名前だけは設定されてるみたいですが) ピクチャーボックスに描く場合にはちゃんとフォントが反映されましたが…… private PrivateFontCollection pfc = new PrivateFontCollection(); private void pictureBox1_Paint(object sender, PaintEventArgs e) { // フォントリソースの取得 byte[] FontByte = Resource1.chupson; // Visual Studio上で組み込んだフォントリソース IntPtr FontPtr = Marshal.AllocHGlobal(Marshal.SizeOf(FontByte[0]) * FontByte.Length); try { Marshal.Copy(FontByte, 0, FontPtr, FontByte.Length); this.pfc.AddMemoryFont(FontPtr, FontByte.Length); Font font1 = new Font(this.pfc.Families[0], 36); SolidBrush brush1 = new SolidBrush(Color.Black); RectangleF drawRect = pictureBox1.ClientRectangle; e.Graphics.DrawString("piyo", font1, brush1, drawRect); } catch (Exception) { Marshal.FreeHGlobal(FontPtr); } }
その他の回答 (1)
- magicalpass
- ベストアンサー率58% (378/648)
フォントファイルをリソースに取り込み、使用時はAddMemoryFontで追加すれば良いかと。 下記リンク先はVBのコードですが、C#でも同様にやれば良いはず。 http://blogs.wankuma.com/youryella/archive/2007/11/05/106185.aspx
補足
ありがとうございます。 リソースにフォントファイルを取り込んで、 リンク先のコードをC#に変換して実行してみたのですが、変換されませんでした。 しかし、C:\WINDOWS\Fontsにフォントをインストールしておくとちゃんと変換されるようです。 つまりフォントファミリーには追加されているにもかかわらず、 リソースのファイルを読んでいないということでしょうか? コード・・・ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Text; using System.Runtime.InteropServices; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } PrivateFontCollection pfc = new PrivateFontCollection() ; private void Form1_Load(object sender, EventArgs e) { Byte[] fontByte = Properties.Resources.[プライベートフォントファイル名]; IntPtr fontPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(Byte))* fontByte.Length); try { Marshal.Copy(fontByte, 0, fontPtr, fontByte.Length); this.pfc.AddMemoryFont(fontPtr, fontByte.Length); } finally { Marshal.FreeHGlobal(fontPtr); } label1.Font = new Font(this.pfc.Families[0], 12); label1.Text = pfc.Families[0].Name; } } }
お礼
ありがとうございます。 確かにPictureBoxだとうまくいくようです。 textBoxやLabelではFontのフォルダにttfファイルがないとだめみたいです。 そういう仕様なのか、バグなのかわかりませんが。。 PictureBoxに変更することを検討してみます。