NS Basic/CEのScaleMode

NS Basic/CE(以下NSBと略)はQVGAで動作している。
試しに、


Print OutPut.Height & "x" & OutPut.Width
というコマンドを実行すると、

268x240

と出力される。
NSBはQVGAだから320x240ピクセルの内、縦の分のタイトルバーとメニュバーを除いた268x240ピクセルがNSBの作業領域ということになる。
この場合はOS(Windows CE)をコンテナとするクライアント領域(ScaleMode)でNSBは動作しているという位に考えておけばいいんだろう(間違ってるかも知れんけど)
で、ちょっと調べたいことがあったので次のコードを実行してみた(先頭の行番号は説明のために付加したもの)


1: Print "ScaleMode : " & OutPut.ScaleMode
2: Print "OutPut " & OutPut.Height & "x" & OutPut.Width
3: Print "OutPutScale " & OutPut.ScaleHeight & "x" & OutPut.ScaleWidth
4: OutPut.ScaleMode = 3
5: Print "ScaleMode = 3 "
6: Print "OutPut " & OutPut.Height & "x" & OutPut.Width
7: Print "OutPutScale " & OutPut.ScaleHeight & "x" & OutPut.ScaleWidth
8: OutPut.ScaleMode = 4
9: Print "ScaleMode = 4"
10: Print "OutPut " & OutPut.Height & "x" & OutPut.Width
11: Print "OutPutScale " & OutPut.ScaleHeight & "x" & OutPut.ScaleWidth
12: MsgBox "test",,"test"
1行目で現在のScaleMode(Default)を調べて、その後、現在のウィンドウサイズとScaleModeでのサイズを出力する。
ScaleModeを3(Pixeles)と4(millmeters)に設定して、それぞれ出力。
X01HTiPaQ rz1717で実行してみた結果が、次の通り。

■左がX01HTで右がrz1717

両方ともQVGAの液晶を持つデバイスだけど出力結果が全く違う。
同じ解像度でもX01HTrz1717の4倍の表示領域がある。
何でこんなことを調べたかというと、ユーザさんから『脳力活性』の計算問題で「字が小さくて見難い」という指摘を度々頂いたからだ。
当時の私のテスト環境(W-ZERO3rz1717)では再現できず(X01HTで初めて再現できた!)、よく原因が分らないままメニューで文字の大きさを選べるようにすることで回避していた。
文字の出力にDrawTextを使っていた部分のみのことなので、解像度に関係があるんじゃないか?と想像していたが、QVGAVGAどちらの解像度でも文字が小さくなる場合とならない場合があるようだ。
X01HTで再現できたこともあり、どうも液晶の物理的サイズに関係がありそうだと思いこんなテストをやってみた。
ご覧の通り、MsgBoxなどは同じサイズで表示されているが、Print文の方は大分違う。
.CaptionとかはScaleModeに合わせて適正に変換されるみたいだが、DrawTextのように直接出力するようなMethodは注意しないと駄目みたい。
ということで、『脳力活性』では、最初に液晶の物理サイズを調べてからFontSizeを決めるようにしてみた。
してみたものの、メニューで文字サイズを選べることが出来るようにしてあるのは、親切というわけではなく自信が無いからだ(笑)
X01HTはもしかしたらハード的にはVGAなの?(違うかな)