08) 無用の長物
 1.09のリリースがありましたが、ランタイムやIDEにバグが結構潜んでいるようなので、まずは、様子見です。
ということで、ちょっと一服、NS Basicでちょっとしたいたずらをしてみました。

 皆さんは、Graffitiでどのくらい入力できるでしょうか?
アルファベット程度はとりあえず、あまり入力しない記号類だと、お手上げでしょうか?
私が最初に買ったPalmPilotのProには、Graffiti Reference Cardという名刺2枚分くらいのカードが同梱されていて、ここに全部のGraffitiストロークが印刷されていますので、VISORに乗り換えた今でも、とても重宝しています。
とは言っても、今回のお話は、Graffitiではなく、Shift Indicatorにスポットを当てて見ました。
Shift Indicatorというコントロール(以下、SIC)は、IDEの画面でも、下の方にこっそりとある上向き矢印のコントロールです。

   Shift Indicator

これは、文字入力を行うときに、日本語モードなのか、英語モードなのか、CapsLockなのか記号モードなのか等など、入力の状態を表すコントロールで、NS Basicのハンドブックには、
「入力用Graffitiエリアが大文字モードになっている時だけ現れます。それ以外は(略)現れません。」
ということです。
働きは、ご存知の通り「a」や「あ」「ア」「・」などの表示を自動的にするもので、ユーザー側は特にコントロールするためのコードを記述する必要がないようです。
(SICにはイベントが存在しませんから、無理と言えば無理ですが)
SICをスクリーン上に配置すると、現在の入力状態がわかるので、文字を入力するアプリを作る時には置いときましょう、というモノです。
さて、このSIC、ハンドブックを眺めていて気が付いたのですが、TopやLeftという配置用のプロパティと同様、WidthやHeightという大きさを決めるプロパティを持っています。
しかし「あ」や「↑」の大きさは一定で、特別なサイズで表示されたものを見たことがありませんね。
ということで、これらのサイズを変えたらどうなるんだろう?と思いまして(純粋な好奇心)さらに、複数のSICを配置したらどうなるんだろう?とも思った訳です。
ハンドブックのどこを見ても「1つしかダメです!」とはありませんので(子供みたい・・・)複数大丈夫なんでしょう。それに、複数の場所で「あ」や「↑」がパカパカ切り替って表示されたら楽しいですよね。
 ということで、これら2つの疑問を試すためのアプリを作ってみました。ソースの説明は全く不要、IDEのスクリーンショットで十分です。


一応、テキスト入力用のFieldを1つと適当なサイズにしたSICを配置(というよりバラバラ)してみました。
笑えるくらい一瞬で終わったGenerateの後、早速本体へインストール。

  

なんじゃこりゃ、って感じですが、とりあえず、WidthとHeightは無視、ということですね。どこにもここにも「あ」と言う物は表示されていませんでした。
ん?「あ」って表示されてるけど、ハンドブックには・・・

「入力用Graffitiエリアが大文字モードになっている時だけ現れます。それ以外は(略)現れません。」

これは、英語版のPalmOSに限ることですね。日本語版では「あ」が表示されますので、ハンドブックの記載不足ですね。

「入力用Graffitiエリアの状態に応じた記号が表示されます。」

とする方が良いでしょう。(本家さま、フォローお願いします。あまり、意味のあることではありませんが・・・)
つぎは、いっせいに表示が変わるという期待を持って「日/英」でもタップしてみましょう。

  

あれれ?1つしか変わりませんね。それも、中途半端な場所ですね。

(調査開始〜〜〜〜〜〜調査中〜〜〜〜〜調査完了)

ということで、色々試してみましたが、一番最後に配置したSICのみ反応していることがわかりました。
最初のIDEの画面では、SICは次の名前になっており、反応したSICが一番最後の「1011」でした。

  

要するに、SICは1つ、それも配置した一番最後のものが動作対象になるようです。
 これらのことからわかるように、SICは、必要なところに1つ置いておけば十分、ということがわかりました。
(最初っから、ムダなことするヤツぁ、いね〜って!)

さて、実行してみて疑問に思ったのですが、なぜ全部が「あ」だったのでしょうか?
どの状態でも良かったわけですから、いったいSICの初期値は、何で決まるのでしょうか?
実は、この疑問については、何度も試している、うっすらと解決していました。結論は、このアプリケーションの起動時の状態を取ってくる、というものです。
試しに、先ほどのアプリで、一度別の状態にして、メニューに戻ってから、再度起動してみましょう。
まず、CapsLockにしてみます。

  

次に、一度、メニューに戻ってみます。(POSE上ですから、驚くほど何もない画面ですが・・・)

  

で、再度起動してみます。(言い忘れましたが、このアプリProject1です。)

  

どうでしょう? 見事に全部、CapsLockです。
同様に一度メニューに戻ってから、メモ帳上でSICの状態を変更してから再度起動しても、同じ状態でした。
ということで、起動時にシステム上のSICの状態を参照して、初期値として表示しているのだと思います。
どうして、初期値が前のアプリの状態を保持しているのか?と言うことですが、NS BasicでもSICの状態は参照も変更もできません。同様に、大抵のアプリ側から操作できないため、そのまま保持されているのではないでしょうか?(変える必要がない、かもしれませんが・・・)

随分、長いことShift Indicatorで遊んでみましたが、いかがでしょうか?
複数を配置すると「無用の長物」ですが、実は、この読み物自体が無用のような気がしますね。最後まで読んでくれた方、ありがとうです。