|
■No32696 (よねKEN さん) に返信
たいへんご丁寧な返信、ありがとうございました。
FormをResizeして確認させていただきましたが、
間違いなく動きます。
それで「よねKENさん」の計算方法を応用させていただき、
次のようにさせていただきました。
int フォントサイズ3(String str, Size mySize, Graphics g)
{
SizeF s = g.MeasureString(str, new Font("MS 明朝", 1));
int a = (int)(mySize.Width / s.Width);
int b = (int)(mySize.Height / s.Height);
return (a < b) ? a : b;
}
これでも一応はうまくできたのですが、「よねKENさん」の方が
やや大きな字になります。
本当にありがとうございました。
参考までに双方のテストソースを記載します。
private void Form1_Resize(object sender, EventArgs e)
{
フォントサイズ計測();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
フォントサイズ計測();
}
void フォントサイズ計測()
{
Graphics g = this.CreateGraphics();
g.Clear(Color.White);
int p2 = フォントサイズ2(textBox1.Text, this.ClientSize, g);
int p3 = フォントサイズ3(textBox1.Text, this.ClientSize, g);
Font f2 = new Font("MS 明朝", p2);
Font f3 = new Font("MS 明朝", (p3>0?p3:1));
g.DrawString(textBox1.Text, f2, Brushes.Red, this.ClientRectangle);
g.DrawString(textBox1.Text, f3, Brushes.Blue, this.ClientRectangle);
g.Dispose();
}
int フォントサイズ2(String str, Size mySize, Graphics g)
{
int prefferedSizeInPoints;
int prefferedHeight = mySize.Height;
Font f = new Font("MS 明朝", prefferedHeight, GraphicsUnit.Pixel);
SizeF s = g.MeasureString(str, f);
if (s.Width < mySize.Width)
{
prefferedSizeInPoints = (int)f.SizeInPoints;
}
else
{
prefferedHeight = (int)(prefferedHeight * mySize.Width / s.Width);
f.Dispose();
f = new Font("MS 明朝", prefferedHeight, GraphicsUnit.Pixel);
prefferedSizeInPoints = (int)f.SizeInPoints;
}
f.Dispose();
return prefferedSizeInPoints;
}
int フォントサイズ3(String str, Size mySize, Graphics g)
{
SizeF s = g.MeasureString(str, new Font("MS 明朝", 1));
int a = (int)(mySize.Width / s.Width);
int b = (int)(mySize.Height / s.Height);
return (a < b) ? a : b;
}
|