Palm Programmer's Laboratory
Palm OS Programmer's API Reference/18
この章では、スクロール バー API のための参照資源を提供します。
ヘッダ ファイル ScrollBar.h がこの章で説明する API を定義しています。追加情報は、Palm OS Programmer's Companion, vlo. I の 「スクロール バー」 を参照してください。
スクロール バー データ構造体 ^TOP^
ScrollBarAttrType 構造体 ^TOP^
目的
ScrollBarAttrType ビット フィールドはスクロール バーの可視特性を定義します。
Prototype
typedef struct { UInt16 usable:1; UInt16 visible:1; UInt16 hilighted:1; UInt16 shown:1; UInt16 activeRegion:4; } ScrollBarAttrType;
フィールド
- usable
- セットされていない場合、スクロール バー オブジェクトは、アプリケーションの現在のインターフェイスの一部とは見なされず、スクリーン上にも現れません。
- visible
- セットされている場合、スクロール バーはスクリーン上に表示されることを許可されます。visible と usable の両方が true の場合、スクロール バーは実際にスクリーン上に表示されます。
- highlighted
- 上矢印または下矢印のどちらかがハイライトされている場合、true です。
- shown
- スクロール バーが可視であるかどうかと、maxValue > minValue であるかどうか(ScrollBarType を参照してください)をセットします。
- activeRegion
- ペンの接触イベントを受け取るスクロール バーの領域。取り得る値は以下の通りです。
- sclUpArrow
- 上矢印
- sclDownArrow
- 下矢印
- sclUpPage
- スクロール カーと上矢印の間の領域
- sclDownPage
- スクロール カーと下矢印の間の領域
- sclCar
- スクロール カー
ScrollBarPtr Typedef ^TOP^
目的
ScrollBarPtr 型は ScrollBarType 構造体へのポインタを定義します。
Prototype
typedef ScrollBarType *ScrollBarPtr;
ScrollBarPtr をすべてのスクロール バー関数へ引数として渡します。以下に示すように、FrmGetObjectPtr() を使って ScrollBarPtr を取得することができます。
scrollBarPtr = FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, scrollBarID));
scrollBarID はスクロール バーの作成時に代入したリソース ID です。
ScrollBarType 構造体 ^TOP^
目的
ScrollBarType はスクロール バーを表します。
- WARNING!
- PalmSource 社(訳者注: 現 ACCESS 社)は、ScrollBarType 構造体の下位互換をサポートしていません。構造体メンバに直接アクセスしないでください。そのようなコードは将来のバージョンで機能しないかもしれません。以下の情報はデバッグ目的でのみ使用してください。
Prototype
typedef struct { RectangleType bounds; UInt16 id; ScrollBarAttrType attr; Int16 value; Int16 minValue; Int16 maxValue; Int16 pageSize; Int16 penPosInCar; Int16 savePos; } ScrollBarType;
作成するコードは ScrollBarType を実体の無いものとして扱うべきです。各値を取得、セットするにはこの章で説明する関数を使用してください。構造体メンバ値を直接変更しようとしないでください。
フィールド
- bounds
- スクリーン上のスクロール バーの位置(絶対座標)とサイズ(ピクセル単位)。例えば、ID が kObjectID のフォームの中にあるオブジェクトの領域にアクセスするには、以下のようにします。
{ RectangleType rect; FormPtr formP = FrmGetActiveForm(); FrmGetObjectBounds(formP, FrmGetObjectIndex(formP, kObjectID), &rect); }
- id
- スクロール バー オブジェクト作成時に指定する ID 値。
- attr
- スクロール バーの属性。ScrollBarAttrType を参照してください。
- value
- スクロール バーの現在の値。この値はスクロール バーの位置を決定するために使用されます。(スクロール バーの中の黒い領域はドキュメントの中の(訳者補足: スクロール バーが示している)位置を示します。)SclGetScroll() を使ってこの値を取得します。与えられる数は通常 minValue と maxValue に関係する数です。これらの値は、スクロール バーが貼り付けられているオブジェクトの物理的な特性、オブジェクトの行数など、には関係しません。この値は通常、初期状態では 0 にセットされ、{[goto SclSetScrollBar,SclSetScrollBar()}} を使ってプログラム上で調節されます。
- minVluae
- 最小値。value が minValue と等しいとき、スクロール カーはスクロール領域の最上段に位置しています。この値は通常 0 です。SclGetScrollBar() を使ってこの値を取得します。
- maxVluae
- 最大値。value が maxValue と等しいとき、スクロール カーはスクロール領域の最下段に位置しています。この値は通常初期状態で 0 であり、SclSetScrollBar() を使ってプログラム上で調節されます。SclGetScrollBar() を使ってこの値を取得します。
- pageSize
- ユーザが 1 ページ分スクロールさせたときのスクロールする行数。SclGetScrollBar() を使ってこの値を取得します。
- penPosInChar
- 内部で使用されます。
- savePos
- 内部で使用されます。
スクロール バー リソース ^TOP^
スクロール バー リソース(tSCL)はスクロール バーを表します。追加情報は、Palm OS User Interface Guidelines を参照してください。
スクロール バー関数 ^TOP^
SclDrawScrollBar 関数 ^TOP^
目的
スクロール バーを描きます。
宣言されている場所
ScrollBar.h
Prototype
void SclDrawScrollBar ( ScrollBarType *bar )
パラメータ
- → bar
- スクロール バー(ScrollBarType 構造体)へのポインタ
返り値
返り値はありません。
コメント
この関数は SclSetScrollBar() と FrmDrawForm() によって内部的に呼び出されます。
互換性
2.0 New Feature Set が存在する場合にのみ、実装されます。
SclGetScrollBar 関数 ^TOP^
目的
スクロール バーの現在の位置、範囲、ページのサイズを取得します。
宣言されている場所
ScrollBar.h
Prototype
void SclGetScrollBar ( const ScrollBarType *bar, Int16 *valueP, Int16 *minP, Int16 *maxP, Int16 *pageSizeP )
パラメータ
- → bar
- スクロール バー(ScrollBarType 構造体)へのポインタ
- ← valueP
- スクロール バーの現在の位置を表す値。(スクロール カーはドキュメントの中の位置を示す黒い領域です。)
- ← minP
- ユーザ インターフェイス オブジェクトの最上段を表す値。
- ← maxP
- ユーザ インターフェイス オブジェクトの最下段を表す値。
- ← pageSizeP
- ページのサイズへのポインタ(ページ スクロール時に使用されます)。
返り値
スクロール バーの現在の値を valueP, minP, maxP, pageSizeP に収めて返します。
コメント
この関数を、スクロール バーを更新するために SclSetScrollBar() を呼び出す直前に、呼び出すかもしれません。SclGetScrollBar はスクロール バーの現在の値を返します。返された値を必要があれば調節し、SclSetScrollBar に渡すことができます。
互換性
2.0 New Feature Set が存在する場合にのみ、実装されます。
参照
SclHandleEvent 関数 ^TOP^
目的
スクロール バーに影響を与えるイベントをハンドルします。
宣言されている場所
ScrollBar.h
Prototype
Boolean SclHandleEvent ( ScrollBarType *bar, const EventType *event )
パラメータ
- → bar
- スクロール バー(ScrollBarType 構造体)へのポインタ
- → event
- イベント(EventType)へのポインタ
返り値
イベントがハンドルされた場合、true を返します。
コメント
penDownEvent が起きると、スクロール バーは sclEnterEvent をイベント キューに送ります。
sclEnterEvent が起きると、スクロール バーは、ペンが接触したというイベントを受け取ったスクロール バーの領域に基づくべきである新しい値を決定します。それから、スクロール バーは sclRepeatEvent または sclExitEvent のどちらかをイベント キューに送ります。
ユーザがペンでスクロール バーを保持し、ドラッグすると、スクロール バーは sclRepeatEvent を発します。動的スクロールを実装するアプリケーションはこのイベントを受け取り、さらに受け取るたびにテキストを移動させるべきです。
ユーザがペンをスクロール バーから離すと、スクロール バーは sclExitEvent を発します。非動的スクロールを実装するアプリケーションはこのイベントを受け取り、さらに sclExitEvent を受け取るとテキストを移動させるべきです。動的スクロールを実装するアプリケーションはこのイベントを無視できます。
互換性
2.0 New Feature Set が存在する場合にのみ、実装されます。
SclSetScrollBar 関数 ^TOP^
目的
スクロール バーの現在の位置、範囲、ページのサイズをセットします。スクロール バーが可視で、かつ、最小値と最大値が等しく無い場合、再描画されます。
宣言されている場所
ScrollBar.h
Prototype
void SclSetScrollBar ( ScrollBarType *bar, Int16 value, Int16 min, Int16 max, Int16 pageSize )
パラメータ
- → bar
- スクロール バー(ScrollBarType 構造体)へのポインタ
- → value
- スクロール バーが移動すべき位置。(スクロール カーはドキュメントの中の位置を示す黒い領域です。)
- → min
- 最小値
- → max
- 最大値
- → pageSize
- スクリーン上に同時に表示され得るテキストの行数(ページ スクロール時に使用されます)。
返り値
返り値はありません。min パラメータが max パラメータよりも大きい場合、致命的なエラー メッセージを表示するかもしれません。
コメント
この関数は、ユーザがフィールドの中のテキストを追加、削除したとき、または、テーブル行が追加、削除されたとき、呼び出されます。
フィールドをスクロールさせるために、アプリケーションは fldChangedEvent を受け取り、スクロール バーを更新すべきです。
max パラメータは以下のように計算されます:
テキストの行数 - ページ サイズ + オーバーラップ
テキストの行数はオブジェクト全体を表示するのに必要な行数で、ページ サイズはスクリーン上に同時に表示され得る行数で、オーバーラップは可視のページの最下段から次のページの最上段までの行数です。
例えば、100 行のテキストがあり、ページに 10 行表示させる場合、max 値はオーバーラップ次第で 90 か 91 になります。そのため、value が 90 または 91 以上である場合、スクロール カーはスクロール領域の最下段にあります。
FldGetScrollValue() を使って value, min, max に渡す値を計算することができます。以下に例を示します。
FldGetScrollValues (fld, &scrollPos, &textHeight, &fieldHeight); if (textHeight > fieldHeight) maxValue = textHeight - fieldHeight; else if (scrollPos) maxValue = scrollPos; else maxValue = 0; SclSetScrollBar (bar, scrollPos, 0, maxValue, fieldHeight-1);
このケースでは、textHeight がテキストの行数で、fieldHeight がページ サイズです。1 ページ分スクロールさせるときオーバーラップの行はありません。ページ サイズがテキストの行数よりも大きい場合、max と min は等しく、スクロール バーは表示されないということに注意してください。
テーブルをスクロールさせるために、FldGetScrollValues と等価の機能はありません。作成するアプリケーションはそれ自身がテーブルをスクロールさせ、スクロール値を追跡し続けなければなりません。テーブルのためのスクロール バー値をセットする例は、サンプル アプリケーションであるメモ帳(MemoMain.c)の中の ListViewUpdateScrollers 関数を参照してください。
互換性
2.0 New Feature Set が存在する場合にのみ、実装されます。
参照