Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume I/9-3
9-3 インプットエリアのポリシー
アプリケーションのフォームがペン入力マネージャを利用できるようにセットアップするには、それぞれのフォームに対して以下の作業が必要になります。
- FrmSetDIAPolicyAttr 関数を使って入力エリアのポリシーを設定し、入力エリアの状態変化に合わせてフォームが自身をリサイズすることをシステムに知らせます。この作業は frmLoadEvent または frmOpenEvent に応答して行ないます。
- PINSetInputTriggerState 関数を使って、入力エリアを開いたり閉じたりするのに使う入力トリガーを有効にします。トリガーの例は、図 9.1 や図 9.2 の右下にある矢印です。
インプットエリアポリシーの設定
FrmSetDIAPolicyAttr を使用したインプットエリアポリシーの設定では、フォームがダイナミックインプットエリアをサポートするかどうかを指定します。リスト 9.2 では、アプリケーションの AppHandleEvent での FrmSetDIAPolicyAttr の呼び出しを示しています。
ほとんどのフォームでは、ポリシーに frmDIAPolicyCustom を指定すべきです。でなければ、システムはフォームをレガシーなアプリケーションと同じものとして扱います。フォームがオープンされた時点でその描画領域が通常の正方形になるように入力エリアが表示され、フォームの表示中は入力エリアを閉じることができないようにインプットトリガーが無効化されます。
- NOTE
- 将来のバージョンの Palm OSでは、レガシーなアプリケーションやフォームに対してインプットトリガーを無効化しなくなる可能性があります。
インプットエリアポリシーはアプリケーション単位ではなく、フォーム単位で設定されます。これは、フォーム毎に入力エリアに対する要求が異なるためです。ユーザー入力に強く依存するフォームでは、フォームがアクティブな間は入力エリアを表示させ続けるべきでしょう。一方、アドレス一覧のように入力フィールドのないフォームでは、より多く情報を表示できるように入力エリアは閉じておきたいでしょう。
入力トリガーの有効化
frmDIAPolicyCustom ポリシーを使用するそれぞれのフォームについて、入力エリアの入力トリガーを有効にすることができます。トリガーを有効にするには、PINSetInputTriggerState 関数を使用します(リスト 9.2 を参照して下さい)。
入力トリガーはシステムダイアログによって無効化される場合があるため、フォーム毎に有効にする必要があります。システムダイアログはアプリケーションフォームの最上位に表示されます。ダイアログが破棄されて制御がアプリケーションに戻った時、入力トリガーはおそらく無効化されています。フォームは既にロードされて開いているため、frmLoadEvent や frmOpenEvent を受信したくはないでしょう。そのかわりに winEnterEvent を受信することになります。そのため、アプリケーションがアクティブな間中入力エリアを開閉できるようにするためには、システムダイアログが表示された後に winEnterEvent に応答してトリガーを有効にする必要があります。
入力トリガーに関連付けられたキーコードは vchrInputAreaControl です。トリガーがタップされる度にこのキーコードで keyDownEvent が発行されます。
入力エリア状態の設定
PINSetInputAreaState 関数を使用することで、入力エリアの状態を設定することができます。ほとんどのフォームではユーザー自身が入力エリアの開閉を決められるよう、入力エリアの状態として pinInputAreaUser を設定するべきです。これは frmOpenEvent に対する応答で行ないます。
稀に、入力エリアの開閉をフォームが決めることが有益な場合があります。例えば、入力エリアを閉じれば全体を見渡せるような背の高いフォームが必要になるかもしれません。入力エリアの開閉状態を明示的に設定するのであれば、winEnterEvent の応答でも設定を行なう必要があるかもしれません。これは、システムダイアログが表示された際に入力エリアの状態をリセットする可能性があるためです。
入力エリアの状態を頻繁に変更し過ぎないように注意して下さい。入力エリアの自動的な開閉が頻発すると、結果としてユーザーを苛立たせる jumpy なインタフェイスになる可能性があります。おそらく、(入力エリアの状態を)どうするべきかはユーザーに決めさせるのがベストでしょう。