Palm Programmer's Laboratory

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

Palm OS Programmer's API Reference/18

← 17 章に戻る ↑トップへ 19 章に進む →

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
    • セットされている場合、スクロール バーはスクリーン上に表示されることを許可されます。visibleusable の両方が 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
  • value
    • スクロール バーの現在の値。この値はスクロール バーの位置を決定するために使用されます。(スクロール バーの中の黒い領域はドキュメントの中の(訳者補足: スクロール バーが示している)位置を示します。)SclGetScroll() を使ってこの値を取得します。与えられる数は通常 minValuemaxValue に関係する数です。これらの値は、スクロール バーが貼り付けられているオブジェクトの物理的な特性、オブジェクトの行数など、には関係しません。この値は通常、初期状態では 0 にセットされ、{[goto SclSetScrollBar,SclSetScrollBar()}} を使ってプログラム上で調節されます。
  • minVluae
    • 最小値。valueminValue と等しいとき、スクロール カーはスクロール領域の最上段に位置しています。この値は通常 0 です。SclGetScrollBar() を使ってこの値を取得します。
  • maxVluae
    • 最大値。valuemaxValue と等しいとき、スクロール カーはスクロール領域の最下段に位置しています。この値は通常初期状態で 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 が存在する場合にのみ、実装されます。

参照

SclSetScrollBar()

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 ページ分スクロールさせるときオーバーラップの行はありません。ページ サイズがテキストの行数よりも大きい場合、maxmin は等しく、スクロール バーは表示されないということに注意してください。

テーブルをスクロールさせるために、FldGetScrollValues と等価の機能はありません。作成するアプリケーションはそれ自身がテーブルをスクロールさせ、スクロール値を追跡し続けなければなりません。テーブルのためのスクロール バー値をセットする例は、サンプル アプリケーションであるメモ帳(MemoMain.c)の中の ListViewUpdateScrollers 関数を参照してください。

互換性

2.0 New Feature Set が存在する場合にのみ、実装されます。

参照

SclGetScrollBar()

← 17 章に戻る ↑トップへ 19 章に進む →