Hatena::ブログ(Diary)

senzogawaのNな日々 このページをアンテナに追加 RSSフィード

2004 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2011 | 01 | 03 | 04 | 05 | 06 |
2012 | 01 | 08 | 09 |
2013 | 02 |

2007-11-12 てきすとうぃんどう

フォントサイズ変更簡易化ウィンドウ

| フォントサイズ変更簡易化ウィンドウを含むブックマーク フォントサイズ変更簡易化ウィンドウのブックマークコメント

 このサンプルは既にサイトには置いてあったが、一応紹介しておこうと思う。

 NScripterで、フォントサイズ変更は割りと厄介な面もあって、よく質問があがっているのを見る。

 そこで、フォントサイズ変更を簡単にするためのサンプルスクリプトを用意した、というわけだ。

http://senzogawa.s90.xrea.com/dl/exwindow.zip

 ファイル内の使用サンプルを見ればわかると思うが、以下のようなスクリプトで、フォントサイズに注目したテキストウィンドウの変更を簡単に行うことが出来る。


*define
gosub *exwindow
game

*start
; 以下のような直接指定の場合、setwindowに渡した情報と等しい必要があります。
setwindow 8,360,23,16,26,26,0,2,20,1,1,#0080ff,0,360,639,479
registerlocation 8,360
registertextinfo 20,1,1
registerwindowfile $0
registerwindowrect 0,360,640,480

fontsize tiny
getmaxlength %0,%1
一番小さな文字です。横%0文字、縦%1文字まで表示できます。
\

fontsize small
getmaxlength %0,%1
小さな文字です。横%0文字、縦%1文字まで表示できます。
\

fontsize medium
getmaxlength %0,%1
普通の文字です。横%0文字、縦%1文字まで表示できます。
\

fontsize large
getmaxlength %0,%1
大きな文字です。横%0文字、縦%1文字まで表示できます。
\

fontsize huge
getmaxlength %0,%1
一番大きな文字です。横%0文字、縦%1文字まで表示できます。
\

fontsize 18
getmaxlength %0,%1
自由指定で18を指定しました。横%0文字、縦%1文字まで表示できます。
\

fontsize 84
おわりだよ!\

end


 内部で何をやっているかを詳しく書くと、まず、テキストウィンドウでの座標関連の要素として、以下のものを想定し、文字のサイズを変更した場合に、テキストの表示領域をテキスト開始左上座標から自動で算出し、そこに納まるよう文字数を調整、余裕があるなら文字の間隔を取る、といった具合だ。

  • テキストウィンドウの領域
  • テキストの表示領域
  • 文字のサイズ
  • 文字の間隔
  • 文字数

 文字の間隔を固定として同様の計算をするfontsize2という命令も用意したが、やってることは似たようなもので、領域内で表示可能な文字数を算出しているに過ぎない。


 このサンプルを見ればわかるかもしれないが、上記の要素のうち、何に注目するかで、算出が変わる。

 たとえば、文字数を維持したまま文字サイズを変更したい場合などは、領域内に納まるよう、領域を広げる必要があるし、中央寄せする場合は、文字サイズと文字間隔と文字数を確定させた後に、領域と文字列1行分のサイズを考慮し、左上座標を算出して指定する必要がある。


 setwindowに指定できるパラメータがやたら多いのは、そういった細かい変更に耐えうるためと思われる。フォントサイズを変更する命令が無いのも、それが一因だろう。

 setwindowに渡す値をどうしていいかわからない人は、ここで紹介したサンプルのように、ある程度割り切ってしまえば何とかなるので、まずは何を主体的な要素とし、何を従属的な要素とするかを考えた方がいい。

あうあう 2007/11/17 14:09 いつもリファレンスを利用させてもらってます。
とても便利で重宝しています。
そこで誤字を発見したので報告します。

menusetwindow命令で太字と影付きのパレメーターが
数値太字フラグ(0:太字、1:普通)
数値影付けフラグ(0:付ける、1:付けない)
といった風に逆になっています。

senzogawasenzogawa 2007/11/19 03:23 ご指摘ありがとうございます。
修正します。