DOBON.NET DOBON.NETプログラミング掲示板過去ログ

文字を折り返したときに…

環境/言語:[VB.NET 2003]
分類:[.NET]

はじめまして現在卒業研究を作成している専門学生のtakamasaと申します。
どうしても分からないことがあるので質問させていただきます。
どうかみなさまご教授いただければありがたいです。

質問内容は↓
textboxの文字をpictureboxに縦書きで描画します。
文字がpictureboxからはみでたら折り返して左の行に表示されるようにしています。
折り返したときに残りの文字が上から表示されるのですが、それを下から表示されるようにしたいです。
コードは

Dim g As Graphics = PictureBox1.CreateGraphics()

Dim drawString As String = TextBox1.Text

'Fontオブジェクトの作成
Dim fnt As New Font("MS 明朝", 15)

'StringFormatを作成
Dim sf As New StringFormat

'縦書きにする
sf.FormatFlags = StringFormatFlags.DirectionVertical Or StringFormatFlags.DirectionRightToLeft


Dim rect As New RectangleF(0, 0, PictureBox1.Size.Width, PictureBox1.Size.Height)
g.FillRectangle(Brushes.White, rect)

'文字を表示
g.DrawString(drawString, fnt, Brushes.Red, rect, sf)

'リソースを開放する
fnt.Dispose()
g.Dispose()

こんな感じで書いています。
よろしくお願いします。
そのようなフォーマットが無いというのは、そのような文化が無いからだと思います。
実際にズバリのパラメータが無いとすれば
1文字単位で座標指定してDrawStringを繰り返すしかないのではないでしょうか。
■No20849に返信(takamasaさんの記事)
見た目描画だけできればいいのであれば、フォントの高さ、幅などは
取得できるので、表示できる文字の幅、高さなどを取得します。

その後、ピクチャーボックスの大きさとご相談ですが、
収まりきる部分に対してのみ1行描画後、
ピクチャーボックスを新たに、折り返し部分に作成して、

1行単位でまた表示できる高さ、幅を取得して、
ピクチャーボックスにあうような文字列数にして、
あとはインデクサで文字列の順序にあわせて文字列を結合しなおして
(文字数は変わらないから、その文字数きりだして、インデクサかなんかで
文字を1文字単位で切出す)
結合結果を毎回ピクチャーボックスに表示するのは駄目ですか?

本当に折り返して、順序逆で表示する事だけしか考えていないので、
表示内容に関する編集などがあるなら、やめたほうがいいです。

見当違いの事をいっていたら申し訳ないです。
■No20855に返信(じゅでさんの記事)
じゅでさん、まどかさん返信ありがとうございます。
卒研ではハガキの表、裏、他にも礼状などいろいろ働いている人の役に立ちそうな支援をするソフトを開発しております。
今回は、はがきの表の住所を書くときの事です。
普通は住所を書くとき1行目に収まりきらなかったら2行目は真ん中当たりから書きますよね??
でも真ん中あたりから書き始めたら3行目にちょっとだけはみでてしまう!!
みたいなことが起こりかねないと思いました。
なので下から表示したら丁度いい感じになると思うのですがなかなか難しそうですね〜↓↓
なにか他に良い案は思いつきませんでしょうか?
まだまだ未熟な為、たよってばかりで申し訳ないです。よろしくお願いします。
■No20858に返信(takamasaさんの記事)
> 今回は、はがきの表の住所を書くときの事です。
たぶんそれでしたら、入力フィールドを分けて、ある程度区切りの良い
部分できる必要があります。

都道府県、市区町村、番地、アパート、屋号など住所に含まれますが、
区切りの良いところで区切らなければ、見た目がちぐはぐになります。

書き方(はがき)
http://daigotorena.moo.jp/lesson/manner-adresse.htm

2行以内に収まらない場合は、次は、フォントサイズを調整するべきだと
思われます。

なので、プログラムで区切る事を考えずに、
フォントとフォントサイズをユーザーが選択できるようにして、
入力フィールドを二つ用意して、2行にわたる場合は、
ユーザーに自分で2行かかせるのがいいと思われます。

DBを使用するのであれば、カラムを都道府県、市区町村などいくつかにわけて、
宛先も人名であれば、苗字と名前で空白が入るはずなので、
別々のフィールドに入れておく必要があります。

あとは、入力と同時に、画面横あたりに、葉書のイメージかなにかで
入力値が反映されたものが表示されるくらいでいいかと思います。
■No20859に返信(じゅでさんの記事)
さっそくの返信ありがとうございます。
そうですね!難しく考えすぎでした!
実はDBで名前は姓、名と分けているのですが住所を分けるのを忘れていて何百もデータがあるのでなんとかプログラムでできないかと……。
フォントサイズやイメージはもうほとんどできているのでがんばってDBを直します!そのほうがすっきりとしますしね!
>書き方(はがき)
http://daigotorena.moo.jp/lesson/manner-adresse.htm
あとこのページとても参考になりました!上ぞろえで書くものなのですね!
本当にありがとうございました!
また分からないことがあればここに質問させていただくかもしれませんがそのときはじゅでさんはじめみなさんよろしくお願いします!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板