Visual Studio 2012 Ultimate C#.NET4.5 の使用
さて、これは私の脳を腐らせました。私は、フォントをアプリケーションに埋め込むために少し調整したコードをいくつか持っています。これまでのところ非常にうまく機能しているため、クライアント マシンはフォントを必要としなくなりました。
これまでの私のコードは次のとおりです。
//add font
[DllImport("gdi32.dll", ExactSpelling = true)]
private static extern IntPtr AddFontMemResourceEx(byte[] pbFont, int cbFont, IntPtr pdv, out uint pcFonts);
/****/
//Dispose Font
[DllImport("gdi32.dll", ExactSpelling = true)]
internal static extern bool RemoveFontMemResourceEx(IntPtr fh);
/****/
static private IntPtr m_fh = IntPtr.Zero;
static private PrivateFontCollection m_pfc = null;
public Font GtSpecialFont(float size)
{
Font fnt = null;
if (null == m_pfc)
{
Stream stmFnt = Assembly.GetExecutingAssembly().GetManifestResourceStream("NewLabelPrinter.Resources.FREE3OF9.TTF"); // always returns null?
if (null != stmFnt)
{
byte[] rgbyt = new byte[stmFnt.Length];
stmFnt.Read(rgbyt, 0, rgbyt.Length);
uint cFonts;
AddFontMemResourceEx(rgbyt, rgbyt.Length, IntPtr.Zero, out cFonts);
IntPtr pbyt = Marshal.AllocCoTaskMem(rgbyt.Length);
if (null != pbyt)
{
Marshal.Copy(rgbyt, 0, pbyt, rgbyt.Length);
m_pfc = new PrivateFontCollection();
m_pfc.AddMemoryFont(pbyt, rgbyt.Length);
Marshal.FreeCoTaskMem(pbyt);
}
}
}
try
{
if (m_pfc.Families.Length > 0)
{
fnt = new Font(m_pfc.Families[0], size);
}
}
catch (Exception rdf)
{
MessageBox.Show("", rdf.ToString());
}
return fnt;
}
private void myFont()
{
txtBarCal.Font = GtSpecialFont(48.0f);
txtBarCodeOLD.Font = GtSpecialFont(48.0f);
txtBarCV.Font = GtSpecialFont(48.0f);
txtBarBK.Font = GtSpecialFont(48.0f);
txtNewBar.Font = GtSpecialFont(48.0f);
}
ご覧のとおり、このコードは非常に優れており、完璧に動作することが気に入っています。これで、クライアントがフォントを必要とせずにフォームにフォントを含めることができるようになりました。
小さな問題が 1 つあります。これを使用してビジュアル スタジオレポートのテキスト ボックス フォントを設定するにはどうすればよいでしょうか???? レポートのコードがないので、途方に暮れています!
まあ、どこかで誰かが何かを知っていることを願っています。私が考えることができる唯一のことは、式やおそらくパラメータを使用することです。
どうもありがとう!