あまつぶ

9.16【NibとCarbon Event Manager】

 今さらながら携帯電話を購入。使い方がわからなくて四苦八苦している。ボタンの数もたかが知れているし、そんなにややこしいものではないのだろうが、例えば、メールを書く時に「改行」はどうやって入れるんだ? とか、疑問点も多い(笑)。
 で、i-modeなのだが、こういうものを手に入れてしまうと、自分でも対応するページを作らずにはいられない。それが役に立つとか立たないとかに関わらず、だ。ま、気紛れだから、おもしろいと思えば続ければいいし、つまらなければやめればいい。気楽にいくべし、だ。
 しかし、そうは思ってみたものの、掲載するコンテンツがない(笑)。現在のこのページのメインは、いうまでもなくこの「あまつぶ」なのだが、この駄文を携帯電話で読みたいとは誰も思わないよな(汗)。ソフトをダウンロードするなんてこともあり得ないし、旅行記も読まないだろう。携帯で見る必要があるというと、やはり、リアルタイム性のあるものということになるんじゃないか。テキストばかりで絵がほとんどないという意味ではのせ替えは容易だが、たいした意味はないのかも知れない。
 いや、意味など求めてない。やはり、ここは自己満足ででもやってみるべし、だ。とりあえず、内容は、あまつぶと、旅行記、それから旅行記に載せている写真。他はまたそのうち考えよう。

 と、できたのがこんなページ。使っているタグは、iモード対応HTML Version1.0・2.0・3.0 タグ・画面イメージ対応表を参考にした。基本的なタグしか使っていないつもりなので、たいていの機種なら大丈夫なはず。写真は、80*56ピクセルのGIF。どんな色が有効なのかわからなかったので、パレットをHTMLで使えるカラーコードにあわせてある。
 しかし、画像って基本的にGIFしか使えないのか。ふーん。PNGはともかく、JPEGには対応しているのかと思ってた。ま、もともと色数が少ないのだから、JPEGはいらないのかな。
 さて、設置して、自分でアクセスしてみると、横幅が狭いのが妙に気になる。文章になっていればいいのだが、箇条書きでちょっとはみ出たりしていると、だめだ。しかたなく、横が入り切るようにすべてコンパクト化。ナビゲーションのために「←前 ↑戻る →次」などとすると1文字あふれてしまうので、「戻る」を「戻」にしてむりやりおさめる。今思うと、間のスペースを半角にすりゃよかったのかも知れないが……(笑)。
 この狭い画面で効率よく参照しようと思ったら、かなり思いきったデザインを考えないといけなさそうだ。そこには、細かいアイコンを作る時と似た、ある種の繊細さが要求されるのかも知れない。

 本題。WebColorXでは、Interface Builderで作ったNibファイルを初めて使ってみたのだが、その話を少し。
 メニューは、リソースでやっていたのとほとんど同じ。パレットからメニューをドラッグ&ドロップして、ファイルメニューやらなにやらを追加していくだけ。アイテムのひとつひとつにコマンド(OSType)をつけることができ、これをつけておくことによってHICommandイベントが送られる。ということは、設定は必須だ。しかしこの機能によって、メニューIDごとの場合わけ……なんていうややこしいことからはめでたく解放される。
 メニューの設定は、SetMenuBarFromNib()を呼ぶだけで終わり。WebColorXではメニューのメンテナンスはいっさい行っていないので、これ以外のメニュー関係のルーチンはいっさい使用していない。あとは、イベントが届くのを待つだけだ。
 ダイアログ(というか、実際はウィンドウ)の方も、パレットからドラッグ&ドロップで作成し、そこに置くコントロール(ボタンとか)を配置していくだけ。配置は、ガイドが表示されるのでそれにあわせていけばきれいに並べることができる。各コントロールには、メニューと同様にコマンドを登録することができ、Carbon Eventとして処理させることができる。「OK」や「Cancel」といったボタンは、'ok 'や'not!'といったものがもともと定義されているのでこれを使うといいようだ。
 また、各コントロールの値を取得したり設定したりするために、コントロールを特定するためのSignatureとIDが必要になる。これを指定しておくことにより、GetControlByID()でコントロールハンドルを得ることができる。
 ウィンドウ自体の作成は、CreateWindowFromNib()で行う。この状態ではウィンドウは表示されないため、各コントロールの調整を行ったのち、ShowWindow()で表示させる。あ、そうだ。CreateWindowFromNib()で指定する名前はNibファイルで指定したものだが、この名前を変更するには名前の部分をダブルクリックする。最初、この方法がわからなくてさんざん悩んだので、念のために書いておく。

 さて、これで、ダイアログ(ウィンドウ)を表示することができた。これまではこの後ModalDialog()を呼ぶだけでたいていのことは事足りたのだが、Carbon環境ではModalDialog()の使用は奨励されていない。ということは、どうするか。言うまでもなく、Carbon Eventを使うのだ。
 先ほど書いたように、各コントロールにコマンドを割り当てておけばCarbon Eventが送られてくるのだから、これを処理してやればいい。すなわち、ウィンドウ用のイベントハンドラを書き、登録してやるだけだ。「OK」ボタンが押されればそれなりの処理をして(例えば各コントロールで変更された初期設定を保存するとか)ウィンドウを閉じればいいし、「Cancel」ボタンならばなにもせずにウィンドウを閉じる。
 問題となりそうなことは、これだけの処理ではダイアログ(ウィンドウ)が表示されている間もメニュー処理などができてしまう点だ。ここは、自分でメンテナンスする必要があるが、WebColorXではもともとメニューと呼べるようなメニューがないため、例えば初期設定ダイアログが開かれている間は初期設定ダイアログを表示するイベントを無視するとか、そんなことしかやってない。だから、初期設定ダイアログが出ている間にアバウトを出すこともできるし、その逆も可能だ。アプリケーションの終了までできてしまうが、特に実害はないからこれでよしということにしておく。

 今回は単純な話ばかりなのでソースはなし。次回は、ホットキーの変更部分の実装について、かもしれない。

September 10, 2001 ↑ September index → September 23, 2001