• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#のビルド方法について教えてください。)

C#のビルド方法について教えてください。

このQ&Aのポイント
  • C#初心者の方が、プライベートフォントのファイル(ttfファイル)をAddFontFileで取り込み、ビルドする方法について教えてください。
  • デバッグ中は、C empの下にttfファイルを置くことで正常に動作するのですが、ビルドしてもうまく動作しないため、ttfファイルをビルドに含める方法を知りたいです。
  • フォントをインストールする手間を避けたいため、ファイルを置く方法以外でビルドできる方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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); } }

mikeyan
質問者

お礼

ありがとうございます。 確かにPictureBoxだとうまくいくようです。 textBoxやLabelではFontのフォルダにttfファイルがないとだめみたいです。 そういう仕様なのか、バグなのかわかりませんが。。 PictureBoxに変更することを検討してみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

フォントファイルをリソースに取り込み、使用時はAddMemoryFontで追加すれば良いかと。 下記リンク先はVBのコードですが、C#でも同様にやれば良いはず。 http://blogs.wankuma.com/youryella/archive/2007/11/05/106185.aspx

mikeyan
質問者

補足

ありがとうございます。 リソースにフォントファイルを取り込んで、 リンク先のコードを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; } } }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C#のビルド方法について質問です。

    IDEをつかわず、コマンドプロンプト上でC#のソースをビルドする時の方法について質問です。 まず以下のようなコードがあるとします。 まずC:\の直下に以下のソースを作成しました。 =================================================== using System; using System.IO; using System.Windows.Forms; namespace Add.TestClass{ public class LibraryClass{ public LibraryClass(){ MessageBox.Show("クラスライブラリコンストラクタの実行"); } } } =================================================== 上記クラスをdllファイルとしてビルドします。 csc /t:library /out:Add.TestClass library.class  と上記のようにビルドしました。するとAdd.TestClass.dllというファイルが確かにできあがりました。 次にこれを実際に実行するためのファイルをつくりました。 それが以下になります。 同じくC:\直下に以下のようなソースを作成します。 =================================================== using System; using System.IO; using System.Windows.Forms; using Add.TestClass; public class MainClass{ public static void Main(String [] args){ LibraryClass obj = new LibraryClass(); } } =================================================== このファイルをビルドします。 csc /r:Add.TestClass.dll main.cs としてビルドし、その後 mainというファイルを実行しました。 するとキチンとMessageBoxで MessageBox.Show("クラスライブラリコンストラクタの実行");が実行されました。 ここまでは問題ないのですが、この場合 main.exeファイルとAdd.TestClass.dllというファイルが 同じ階層に存在するような状態になっているのですが、これを main.exeファイルのある階層にdllというディレクトリを作成し そのdllの中にAdd.TestClass.dllというファイルをおいた階層状況でmain.exeファイルを実行したいのです。 そのためにまず、 csc /r:”C:\dll\Add.TestClass.dll" main.cs 上記のようなビルドオプションでビルドしてみたのですが、ビルドはとおりましたが -------------------------------------------------------------------------------------------------------------------- ハンドルされていない例外: System.IO.FileNotFoundException: ファイルまたはアセン ブリ 'Add.TestClass, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'、ま たはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりませ ん。 場所 MainClass.Main(String[] args) -------------------------------------------------------------------------------------------------------------------- というエラーがでました。 このdllファイルを特定の任意のディレクトリ内において、main.exeを実行してうまく動くようにするためには どのようなビルドオプションをつけたらいいのでしょうか? よろしくご教授お願いいたしま。

  • Visual Studioでのビルド

    Visual Stuido Express2012を使用しているのですがビルドについて質問があります。 DBViewerというプロジェクト名でC#のアプリを作成しているのですが ビルドしてできたexeファイルが下記の2通りの場所に存在しています。 exeファイルも両方動作します。 下のパスの方がフォルダの中身がスッキリしていてるのですがこの違いは 何なのでしょうか。また、リリースには下のパスのフォルダを使用するのが 正しいのでしょうか。 C:\Visual Studio 2012\Projects\DBViewer\DBViewer\obj\Debug C:\Visual Studio 2012\Projects\DBViewer\DBViewer\bin\Debug

  • コードは間違ってないのにビルドが必ず失敗になります。

    ビルド、またはデバックなしで開始を押すと必ずエラーになります。 パソコン自体を再起動して、ビルドすると正常にビルドされます。 正常にビルドされるのはその再起動した後の最初の一回だけで、コードを追加したり変更したりしてもう一度ビルドするとエラーになります。 エラー表示内容は以下です↓ ファイル "~~~~" を "~~~~~" にコピーできません。別のプロセスで使用されているため、プロセスはファイル '~~~~~' にアクセスできません。 これはどういう意味なんでしょうか。 正常にビルドするにはどのように対処すればよろしいのでしょうか。 回答お待ちしております。

  • Visual C++のビルドで

    こんにちは。VC++の初心者です。 今MFCアプリケーションでシングルドキュメントで「ユニコードライブラリをしようする」をチェックなしで簡単なプログラムを作ったのですが、HelloVCView.cppファイルの中で、 void CvdclsView::OnDraw(CDC* pDC)  //■変更 /*pdc*/ → pDC { ・・・   pDC->TextOut(0,0,"Hello,VC++"); }     と本に書いてあるとおり変更して、ビルドしたところ、 1>c:\documents and settings\・・\my documents\visual studio 2005\projects\vdcls\vdcls\vdclsview.cpp(51) : error C3872: '0x3000': この文字を識別子で使用することはできません 1>c:\documents and settings\・・\my documents\visual studio 2005\projects\vdcls\vdcls\vdclsview.cpp(52) : error C3646: '    ' : 不明なオーバーライド指定子です といった表示がでてしまい、ビルドできません。最初のほうはこれでビルドできたのですが、最近になってこのように新しく作ってビルドするとこのような表示が出てしまいます。このエラー表示をダブルクリックしたら上のOnDraw関数のところに移動しました。設定の箇所をいじったつもりはないのですがもしかしたらそのようなミスがあったかもしれません。 この0x3000とは何でしょうか?どのようにすればこのような問題が解決するのでしょうか。変な質問かもしれませんが、よろしくお願いします。 ちなみにVisual Studio 2005 Academic Editionを利用しています。

  • 複数ファイルのビルド方法(緊急)

    19歳のアフィリエイターです。 現在CやCPPファイルを使ってゲームマシンのエミュレーターの開発を行っています。 プログラミングの方は完成したのですが、 2階層までのディレクトリからなる複数のCやCPPファイルから、 肝心のEXEファイル(実行ファイル)を作成するビルドの方法が、分からなくて物凄く困っています。 インターネットでいくら探し回っても、一向に複数のファイルをビルドする方法が分かりません。 どなたか複数のファイルをビルドして、実行ファイルを作成する手立てを教えてください。 開発にはMicrosoft Visual C++ 2010とテラパッドを使っています。

  • リリースビルドで遅くなる

    非常に大量のコードを書いた後で気づいたので 挙動からおそらくその辺だと「思われる」のですが Windows XP SP 3で、Visual C++で デバッグビルド・リリースビルドしたときの速度を比較してみると おそらく、メモリマップドファイル絡みの個所で  現状なぜかリリースビルドの方が遅くなります。 巨大なファイルを1度扱ってから再度ほぼ同じ個所を使用した時 デバッグビルドではその間にアプリケーションを1度終了したとしても、その後別に巨大なファイルを使ったりしなければ どうもシステム的に(?)何らかのキャッシュが効いているようで 1回目で23秒程度かかる処理が、2回目以降は7秒弱で出来てしまいます。 (これは100回やったら99回以上はなるんでは?というくらい安定しています) 対してリリースビルドでは 最初の1回は同じくらいですが 2回目以降でも16秒程度はかかってしまう感じです。 なお、そのけた外れに長い演算の末に出来上がるfloatの配列は、デバッグビルド・リリースビルドで端から端まで完全に一致する、という確認もできています。 アプリ的に 2回目以降の時間を短縮できた方が非常に都合が良いのですが ビルドの設定はほとんど同じですが、これは仕様でしょうか? もしこれがキャッシュの方式の問題、であるのなら Windows APIなどを使うことにより対処可能な問題でしょうか? あるいは、デバッグビルド・リリースビルドの違いによるものではなく このアプリケーションのデバッグビルドによって出来た実行ファイルの方に 以前関連付けを行ったりするように(アイコンや、独自ファイル形式ダブルクリックで開けるように) レジストリを書き換えたのですが これによってシステムから「なんらかの優先事項」を享受できるようになっているため だったりする、という可能性もあるのでしょうか?

  • eclipseでビルドがとおらない!

    eclipseでC言語を作成しようとCDTを入れました。以下のサイトを参考にmakeファイルを作りビルドしたのですが、実行ファイルができません。 http://www2.atwiki.jp/ccw/pages/30.html このサイトに欠いてあるとおりにしているのですが、どうしても原因がわかりません。コンソールには特にエラーがでていません。すべてビルドを行っても何もおきません。 eclipseのバージョンは3.1でcygwinを入れています。cygwinのヘッダファイルはきちんと認識されていてeclipse上に表示されています。どうすればビルドして実行ファイルができるようになるのですか?ビルドする方法を教えてください・。

  • Visual C++のビルドにて

    Microsoft(C) Visual C++.NET 2003 std 上記のコンパイラを使用してあるプログラムをビルド しとようと したのですが以下のエラーがでてビルドできませんでした。 プログラム名:pro 名前:仮名 コンピュタ名:home 「pro fatal error LNK1201: プログラム データベース 'c:\Documents and Settings\田中 太郎.home\My Documents\Visual Studio Projects\bpro\Debug\pro.pdb' に書き込めません。ディスク容量不足、パスが無効、また十分な特権がない可能性があります。」 これの解決方法を知っている方、おしえてくださいましm(_)m

  • ビルドエラー(C1083)について

    c++初心者です。 先日学校の課題用に配布された画像処理プログラム(C++)を実行しようとしたのですが、 ビルドエラーが出てしまい、色々調べてみたのですが解決法がわかりません。 エラーの内容は、 fatal error C1083: include ファイルを開けません。'cv.h': No such file or directory というものです。 使用しているのは Microsoft visual c++ 2008 express edition OpenCV です。 また、インクルードファイルには ・C:\Program Files\OpenCV\cv\include C:\Program Files\OpenCV\cvaux\include C:\Program Files\OpenCV\cxcore\include C:\Program Files\OpenCV\ml\include C:\Program Files\OpenCV\otherlibs\highgui ライブラリファイルには ・C:\Program Files\OpenCV\lib を追加し、pathにも ;C:\Program Files\OpenCV\bin\ が追加してあります。 プログラム上の問題ではなく申し訳ないのですが、よろしくお願いします。 OSはvistaです。

  • Visual C++ 2008 Express Editionの使用方法について

    プログラミング超初心者です. Visual C++ 2008 Express Editionの使用方法についての質問です. 入門書やネット情報を元に新しいプロジェクトを作成しました.その中に新しい項目(C++ファイル)を追加し,ソースコードを書き,デバックから「デバックなしで開始」をすればプログラムを実行できることはわかりました. 問題はここからなのです.初めに作ったファイルと別のソースファイルを作成したいときはどのようにすればよいのかがわかりません. 新しい項目の追加でC++ファイルを追加してみました.でもそれを「デバックなしで開始」しても,初めに作ったC++が実行されるされるだけで,新しく作ったファイルを実行できません. なにか間違いをしているようなのですがどのような間違いをしているのかがわかりません. 入門書等を見ても,2つ目以降のファイル作成方法が書いてありませんので,こちらで質問させていただきました. どうかよろしくお願いいたします.