Palm Programmer's Laboratory

トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

BBS-雑談掲示板/20

モードレスフォームにおける 5-Way Rocker 対応 - 陰郎 (2006年12月28日 22時34分59秒)

陰郎です。

Palm OS 5.4 以降の 5-Way Rocker についてなのですが、普通に Palmware を作成するとモーダルフォームでは自動的に 5-Way Rocker で制御可能なカーソル(というのかな?)が表示されるのに対して、モードレスフォームでは表示されません。しかし、デバイス標準のPIMアプリなのでは表示されるため、対応する方法はあるものと推測しています。このあたりの情報をお持ちの方、いらっしゃいますでしょうか? ポインタを示して下さるだけでも結構なので、ご存知の方がいましたらご教示ください。

- EIJ (2006年12月29日 01時30分13秒)
手持ちのコードをチェックしてみたところrcpにNAVIGATIONというリソースを追加して実現しているようです(自分で書いたコードなんですけど、一年以上前の事なので全然覚えていません(^^;)Pilrcのv3.2のマニュアルの中にNAVIGATIONの書式が解説されていますので、それを参考にしてみて下さい。それほど細かい制御を必要としないならリソースにこんなモノを追加しなくても、関数を一つ呼ぶだけでOKだったような気もするのですが覚えていませんPalmのKnowlege Baseを5WayRockerで引いてみるとなにか出てくると思います
- 陰郎 (2006年12月29日 12時41分27秒)
EIJ さん、ありがとうございます。ひとまずのところ、陰郎の環境は CodeWarriorPilRC は 2.8 らしいのです。たぶんアップデートしないとダメでしょうね...しかし、3.2 で PilRC Designer が動いてくれるかどうか...というわけで、API サイドからなんとかならないか試してみようと思います。
Re - 陰郎 (2006年12月29日 13時47分45秒)
さくっと API を見つけられなかったので、PilRC 側でトライしてみました。PilRC Designer は pilrc とは無関係に動作するようなのでここはひとまず通過。しかし、CodeWarrior でビルドすると何故だかエラーになりました。pilrc.exe を直接使用すると問題なくいけるのですが...調査続行です。
Re: - 陰郎 (2006年12月29日 14時29分03秒)
理由がわかりました。PilRC の置き場所は{Codewarrior}/CW for Palm OS Tools/PilRC なのですが、Codewarrior IDE が使用しているのは {Codewarrior}/Bin/Plugins/Support/Palm_OS 配下にある pilrc.exe のようです。こちらが最新になっていなかったので IDE からのビルドではエラーになっていたのでした。ひとまず報告まで。

Re: - 陰郎 (2006年12月29日 16時06分22秒)
ひとまず、NAVIGATION を rcp に追加することで rocker によるフォーカス移動ができるようになりました...しかし、フォーム上に存在するテーブルコントロールにだけはフォーカスが当たらない...NAVIGATION にはちゃんとテーブルの ID を記述しているのに...アプリレベルでの制御が必要なのかな? さらに調査は続きます...
Re: - EIJ (2007年01月18日 15時34分14秒)
この間ファイルの整理をしていたときに偶然見つけたのですが、NAVIGATIONを制御するAPIは FrmSetNavState のようです。 これをキーワードにしてGoogleで検索すると日本語も含めてそれなりの数の情報が集まりますのでおためし下さい。
Re: - 陰郎 (2007年01月18日 22時41分26秒)
EIJ さん、ありがとうございます。rcp への記述とAPIのあわせ技を使うことで、テーブルにフォーカスが当たらない現象も対処できそうです。それなりにコードを書かなければならないようなのでちょっと時間がかかるかもしれませんが、取り組んでみます。
Re: - 大野 一樹 (2007年01月18日 23時56分30秒)
陰郎さん 私も最近Rockerについて色々調べて、Arisaという電卓ソフトに適用することができました。まだリリースできていないけど。 私は、GCCとPilrcを使っていますが、リソースにNAVIGATIONを設定するのは、EIJさんの書かれていたとおりで、陰郎が言われるテーブルには、ちょっとした細工が必要だったと記憶しています。 イベントで、frmObjectFocusTakeEventが発生するので、以下のように処置するしかなかったように思われます。 切り出しですが、大体お分かりになられると思いますので、これで。 case frmObjectFocusTakeEvent: GetObjectBounds(eventp->data.frmObjectFocusTake.objectID, &r); HsNavDrawFocusRing(formp, eventp->data.frmObjectFocusTake.objectID, hsNavFocusRingNoExtraInfo, &r, hsNavFocusRingStyleObjectTypeDefault, true); break;
Re: - 陰郎 (2007年01月19日 23時32分33秒)
大野さん、情報ありがとうございます。Rocker 対応アプリ内の別作業にてんやわんやなため、まだ手を着けられていないのですが、ひとまずイベント処理が必要なことは理解いたしました。ありがとうございます。
Re: - 陰郎 (2007年02月25日 22時11分05秒)
1ヶ月ほどあいてしまいましたが、ようやくテーブルコントロールの 5 Way Rocker 対応に着手できました(実は当初悩んでいたアプリとは別モノなのですが)。大野さんにご教示いただいた方式でひとまずはフォーカスの枠を描画することはできました。しかし、ここから操作性を上げていくには、更なる作り込みが必要なのですね...頑張ります。