- PR -

C# 文字列描画時の占有領域のサイズを知りたい(Graphicsオブジェクト)

投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2007-04-28 16:30
Q1.下記例の"本日は晴天なり"が占有する方形領域の高さと幅のサイズは?
Q2.下記例の"本日は晴天なり"と"1234567890"の改行ピッチは?
Q3.幅ピッチ固定のフォント(例 MS ゴシック)の場合、既定の幅ピッチを取得する方法は?

 Grahicsオブジェクトに対してDrawStringを使って文字列を描画する時に文字列が実際に描画される領域のサイズを知りたいです。PrintDocumentで帳票を作成する時に、印刷物を定規で測ってレイアウト調整をしていました。

// ソースコード例
// WindowsFormにPrintDocumentとButtonを貼り付け、
// 下記のソースコードを追加すると
// 左上に"本日は晴天なり"次の行に"1234567890"が印刷されます。

using System.Drawing;
using System.Drawing.Printing;
....省略

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Graphics g = e.Graphics;
Font font = new Font("MSP ゴシック", 32);
Brush brush = new SolidBrush(Color.Black);
PointF pointF = new PointF(100f, 200f);
g.DrawString("本日は晴天なり\r\n1234567890\r\n", font, brush, pointF);
}

private void button1_Click(object sender, EventArgs e)
{
this.printDocument1.Print();
}


rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2007-04-28 17:48
今日は

GraphicsにはMeasureStringが有ると思います。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-04-28 19:12
メモリの話かと思ったがそっちかよww

>占有領域のサイズ

なんて書くより「描画される文字列の幅」とかそういう表現にしれww
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-04-28 19:33
質問の回答ではありませんが関連情報として挙げておきます。
DrawString のオーバーロードのうち StringFormat を引数に取るものを使えば
指定領域内に文字列を描画することができます。
帳票ならこちらを使う手もありますね。
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2007-04-28 20:14
いや、ぶさいくろう氏。
逆に突っ込んでしまってすまないが、勘違いするのはかまわないとはいえ、「描画時」「領域」「サイズ」と来たら普通に通じると思うぞ。別にわかりにくいタイトルではない。現に私は勘違いしなかったし、ぶさいくろう氏の書き込みを見て「ああ、そう取るんだ」と初めて思ったぐらいだ。

占有領域というと厳密には確かにレイアウトな話で描画から類推するのは難しいかも知れないが大抵セットなので勘違いするほうが特殊だろう。まぁ、その者のバックグラウンドに依存するので一概には言えないことではあるが。

それと幅「だけ」ではないのでその表現はNGだ。MesureStringの戻り値はSizeFであるし。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-29 08:17
私は "占有領域" だけで、メモリ関連の話だと思いました。
その前の "描画時" は 「タイミングに過ぎない」 と思いました。

わかりにくいタイトルというより、付けにくいタイトルですね。
「Graphics から文字列を描画した時の文字列が描画される領域を事前に取得したい」

まあ、内容を読めばわかるので良いでしょうけど。
これに限らず件名に困る場面はあるでしょうね。(わからないことであればなおさら)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-04-29 12:42
確かに仰るとおりだね。
ごめんなさい。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-30 21:23
日本語は元々「縦書き」なので幅が一定ですが、元から横書きな文化であるところに「幅は?」と求めるのが無理なように思う。
幅が一定のフォントは、タイプライターのためだけなので、そっちの方がむしろ“例外”なのでしょう。

国語のノートはマスが書いてある(幅も高さも一定)けど、英語のノートは横線が引かれているだけだったよね(高さは一定だが、幅は不定)。
_________________

スキルアップ/キャリアアップ(JOB@IT)