ページ 11

文字描画で改行・・・

Posted: 2013年6月30日(日) 14:01
by mi_l
度々失礼します。

トピックを細かく小分けしています

前回
前々回

の続きなので・・・

今回やりたいのは自動改行、また、改行させる方法です。

前回は文字描画まではいきました。

そして次に、200x200の画像の上から文字を描画しました。

例えば、(100 , 100)の位置に200x200の適当な画像を貼ります。

そして、その画像の上である(110 , 120)の位置から読み込んだ文字を描画しました。

普通に描画はできましたが、文字数が多く画像からはみでてしまいました。


読み込むテキストファイル(その1)

コード:

ここは・・・・・・・・・・・・・・・県立・・・・・・・・・・・・・・・・・・・・高校です。
案の定画像外の黒い所まで描画されてしまいます。(背景は真っ黒です)

当たり前だとは思うのですが、これを改行させるやり方とかあるのでしょうか?
所定のx座標までいったら改行

例、x座標が280より大きくなったら110に戻してy座標に50を足す・・・的な・・・

もしくは(その2)

コード:

ここは
・・・・・・・・・・・・・・・県立
・・・・・・・・・・・・・・・・・・・・高校です。
と、テキストファイルで改行してしまって無理やり幅を狭くするしかないのでしょうか?


(その2)の描画の仕方の方が綺麗だとは思いますが、今回は改行できればさせたいだけですので、2行になろうと3行になろうと構いません。

要は、(その2)のテキストファイルでは「ここは」の後に無駄なスペースができてしまいます。これを阻止したいのです。

テキストファイルを(その3)

コード:

ここは・・・・・・・・・・・・・・・・・
・・・・・県立・・・・・・・・・・・・・
・・・・・・・・・・・・・・高校です。
というようにやってしまうとすごく変な感じになります。


ご教授お願いします。

Re: 文字描画で改行・・・

Posted: 2013年6月30日(日) 14:09
by softya(ソフト屋)
文字列を与えれば、幅を調べる事はできます。
あとはルールを作って、適当な幅になるように毎回文字列を組み立てて幅を知らべてやって、改行も自分で制御していやるだけです。
ただ、そのルールが明確じゃないと出来ないです。
※ 現状mi_lさんが書いているのは、明確なルールに見えません。

Re: 文字描画で改行・・・

Posted: 2013年6月30日(日) 14:18
by mi_l
返信ありがとうございます。

とりあえず助言された通りに考えながらやってみたいと思います。
softya(ソフト屋) さんが書きました: ※ 現状mi_lさんが書いているのは、明確なルールに見えません。
あたりまえです。
どうすればよいかわからずに質問している私が明確なルールなんて決めているはずありません。

これから決めていきたいと思います。


詰んでしまったらもう一回質問したいと思います。

Re: 文字描画で改行・・・

Posted: 2013年6月30日(日) 14:24
by softya(ソフト屋)
> どうすればよいかわからずに質問している私が明確なルールなんて決めているはずありません。

こちらからは、mi_lさんがどうしたいのか分からないと言うことです。
正解が有る問題でもないので、mi_lさんの理想がわからない以上は答えようがないと思ってください。
「なんとなく、うまく行きませんか?」ではルールを決めようがないのです。
何を条件に改行されて、何を条件に前の空白の幅を決めるのでしょう? 
mi_lさんの理想を教えて下さい。

Re: 文字描画で改行・・・

Posted: 2013年6月30日(日) 14:30
by mi_l
mi_l さんが書きました:当たり前だとは思うのですが、これを改行させるやり方とかあるのでしょうか?
所定のx座標までいったら改行

例、x座標が280より大きくなったら110に戻してy座標に50を足す・・・的な・・・
一応ここが改行のルール?なのですが・・・

描画の際にはこのようなことは計算していないと思いますので・・・訊いたのです。

Re: 文字描画で改行・・・

Posted: 2013年6月30日(日) 14:58
by softya(ソフト屋)
ざっとこんな感じですか。
(1)出力文字列バッファに元の文字列から次の一文字追加。
(2)出力文字列バッファのドット幅をGetDrawStringWidthで調べる。
(3)幅が(280-先頭x)をオーバーしていたら、この出力文字列バッファを(先頭x,表示y) で表示する。先頭x+=50、表示y+=16、出力文字列バッファを空に。
(4)元の文字列が無くなるまで(1)へ戻る。
(5)出力文字列バッファの入っていた内容を(先頭x,表示y) で表示する。 

【補足】 ちなみに依頼されたとおりに書きましたが、毎行xを+50して良いのか判断に迷いました。

Re: 文字描画で改行・・・

Posted: 2013年6月30日(日) 18:11
by mi_l
そのような感じです!

Re: 文字描画で改行・・・

Posted: 2013年6月30日(日) 20:16
by softya(ソフト屋)
私からは以上なのですが、これで実装してみてください。と言うより練習のために実装すべきだと思います。