Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume I/4-14
4-14 ダイナミック UI
Palm OS 3.0 以降では、フォームやフォーム内の要素を実行時に作成するための関数が用意されています。ほとんどのアプリケーションでは実行時に UI 要素を変更する必要はありませんし、標準アプリケーションでもやっていません。また、Palm のユーザーインターフェースガイドラインはそれを推奨していません。必要に応じて UI オブジェクトを表示する良い方法は、Consructor でオブジェクトを作成し、usable 属性を false に設定することです。そして FrmShowObject と FrmHideObject を使用し、必要に応じてオブジェクトの表示・非表示を切り換えます。
フォームパッケージのようないくつかのアプリケーションでは、実行時に表示するものを作成しなければなりません。ダイナミック UI の API はこのようなアプリケーションのために提供されています。ユーザーインターフェースを動的に変更する必要性が明確でない場合、そうすべきではありません。予期しないアプリケーションのインターフェース変化はユーザーを混乱させ、不満を抱かせます。
FrmNewForm 関数を使うことで、新しいフォームを動的に作成できます。Palm の UI ガイドラインはモーダルダイアログを画面の下部に、スクリーンと同じ幅で配置することを推奨しています。この関数ではそれは強制はされませんが、組込みアプリケーションとルック&フィールドの一貫性を保つために、強く推奨します。
フォーム上に新しいオブジェクトを作成するには、FrmNewLabel、FrmNewBitmap、FrmNewGadget、LstNewList、FldNewField、および CtlNewControl 関数を使用します。
アクティブフォームに新しいアイテムを追加するのは素敵なことですが、それはフォームの構造体がメモリ内を移動することを意味しています。そのため、フォームやフォーム上のコントロールを指すポインタが変わる可能性があります。新しいオブジェクトを作成したら、返された新しいフォームのメモリ位置を指すように変数やポインタを更新するようにして下さい。
FrmRemoveObject 関数はフォームからはオブジェクトを取り除きます。この関数はオブジェクトが参照するメモリ(があったとしてもそれ)を開放せず、フォームのチャンクを縮小します。フォームから要素を削除する際の効率を最大化するために、インデックス値が減少する順序で、もっとも大きなインデックス値を持つ要素から削除を行なって下さい。フォームから要素を削除する場合、要素を追加する場合と同じ配慮が必要になります。フォームとフォームのコントロールを指すポインタは、フォーム構造体がメモリ内を移動した結果として変更される可能性があります。
動的にフォームを作成した場合、あるいはアプリケーションをより堅牢にするためにだけにでも、FrmValidatePtr を使ってフォームポインタおよびポインタが指しているフォームが有効であることを確認して下さい。この関数は多くのバグを捕捉できます。是非使いましょう!
ダイナミック UI 関数
フォームを動的に作成するために、以下の関数が利用できます。
- CtlNewControl
- CtlValidatePointer
- FldNewField
- FrmNewBitmap
- FrmNewForm
- FrmNewGadget
- FrmNewLabel
- FrmRemoveObject
- FrmValidatePtr
- LstNewList
- WinValidateHandle
- FrmNewGsi ( 3.5 新フィーチャセットが利用できる場合のみ )