Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume I/4-12
4-12 スクロールバー
Palm OS 2.0 以降では、垂直スクロールバーのサポートを提供しています。これにより、フィールド、テーブル、およびリストにスクロールバーをアタッチすることができ、システムはユーザーのスクロールバー操作に対して適切なイベントを送信します( 図 4.24 参照 )。
図 4.24 スクロールバー
ユーザーインターフェースにスクロールバーを追加するために必要な作業は以下の通りです。
1.スクロールバー UI リソース( tSCL )を作成する
ID とスクロールバーの矩形領域を指定します。高さは追加するオブジェクトと同じにし、幅には 7 を指定します。
2.ページサイズ、および最小値・最大値を指定します。
- 最小値は通常 0 です。
- 最大値は通常 0 にしておき、プログラムで指定します。
- ページサイズは、テキストのスクロールによってスクロールバーが何行移動するかを指定します。
3. スクロールバーをフォームに追加する
アプリケーションをコンパイルすると、システムはスクロールバーの UI オブジェクトを作成します( スクロールバー UI オブジェクトの詳細については Palm OS Programmer's API Reference の“スクロールバー”の章を参照して下さい )。
スクロールバーとそれが追加された UI オブジェクトがやりとりをする必要があるのは、以下の2つの場合です。
- テキストが追加または削除された場合、スクロールバーはサイズの変更については知る必要があります。そのために、テーブル、フィールド、またはリストの属性として hasScrollbar をセットします( テーブルに関しては、TblHasScrollBar 関数を用いてプログラムで設定する必要があります )。フィールドに hasScrollbar が設定されていると、フィールドのサイズが変更されるたびに fldChangedEvent を受け取ることになります。アプリケーションはこのイベント処理においてスクロールバーの新しい最小値、最大値、現在位置を計算し、SclSetScrollBar をコールして値を更新しなければなりません。テーブルに hasScrollbar が設定されている場合、テーブルのサイズ変更は自前でトラックする必要があります。サイズが変化するたびにスクロールバーの最小値、最大値、および現在位置を計算し、SclSetScrollBar をコールして値を更新しなければなりません。リストは静的データのためのものなので、通常はリストのサイズが変化することを心配する必要はありません。スクロールバーの現在位置をセットするためにフォームが初期化された場合には SclSetScrollBar をコールすることになります。
- スクロールバーを移動した場合、テキストはそれに応じて移動しなければなりません。これは動的(ユーザーがスクロールバーを動かしている間)にも静的(ユーザーがスクロールバーを離した時)にも発生することです。システムは次のスクロールバーイベントを送信します。(1) スクロールバーの領域内で penDownEvent が発生すると、sclEnterEvent が送信されます。(2) スクロールバーがドラッグされると、sclRepeatEvent が送信されます。(3) ユーザーがペンを離すと、sclExitEvent が送信されます。このイベントは sclRepeatEvents が直前には送信されたかどうかにかかわらず送信されます。 即時モードのスクロール(つまり、ペンドラッグでスクロール)をサポートしたいアプリケーションは、sclRepeatEvent の発生を監視する必要があります。このイベントに応答して、UI オブジェクトに関連付けられたスクロール関数( FldScrollField、LstScrollList、テーブルの場合は独自のスクロール関数 )をコールします。即時モードのスクロールをサポートしないアプリケーションは sclRepeatEvent の発生を無視し、sclExitEvent だけを待つことになります。