前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFYScrollBarControl
スクロールバーコントロールを表す抽象クラスです。
#include <SFYScrollBarControl.h.hpp>
class SFYScrollBarControl : public SFYControl;
SFMTYPEDEFCLASS(SFYScrollBarControl)

継承図

SFYScrollBarControl クラスの継承図

協調図

SFYScrollBarControl クラスの協調図

解説

■ 仕様と使い方

SFYScrollBarControl は、 各種スクロールバーコントロールを実装するための起点となるクラスです。

SFZScrollBarControlSFZContainerScrollBarControl は、 このクラスを継承します。

このクラスは、スクロールバーの描画機能(トラック、増分矢印ラベル、減分矢印ラベル、サムラベル) とスクロール状況(最大値、最小値、現在値、ページサイズ)を設定する機能を提供します。 また、以下の表にあるようにいくつかの仮想関数のデフォルトの動作も実装します。

以下は、スクロールバーコントロールの仕様です。

仮想領域実領域よりも大きい場合や、 リストボックスやメニューなどで実領域に表示可能な項目よりもたくさんの項目がある場合、 レスポンダはスクロールしてコンテンツ(内容)を表示します。

このようなレスポンダでは、 以下の手順でスクロールバーコントロールを装着することにより、 実領域に現在表示されているコンテンツに関するコンテンツ全体に対する相対的な位置関係(スクロールの状況)をスクロールバーコントロールに表示することができます。

[Note] 注意

スクロールバーを装着する対象となるレスポンダを『ターゲットレスポンダ』と呼んでいます。 また、ターゲットレスポンダの実領域に現在表示されているコンテンツを『表示コンテンツ』、 表示されていないものも含めたすべてのコンテンツを『全体コンテンツ』と呼んでいます。

  1. SFYResponder::SetRealBound 関数を呼び出してスクロールバーコントロールの実領域を設定します (ターゲットレスポンダは、スクロールバーコントロールの親レスポンダか姉妹レスポンダの関係になります)。 スクロールバーコントロールの実領域は、減分・増分矢印矩形領域や、トラック領域、サム領域を考慮して決定する必要があります。 また、縦スクロールバーの横幅や横スクロールバーの縦幅は、5 ピクセル以上の値を設定してください。
  2. SFYControl::SetMinimumValue 関数を呼び出して最小値(=全体コンテンツの始点)を設定します。 [通常、この関数呼び出しは省略されます。デフォルト値の 0 を使用します。]
  3. SFYControl::SetMaximumValue 関数を呼び出して最大値(=全体コンテンツの終点または項目数)を設定します。
  4. SFYControl::SetCurrentValue 関数を呼び出して現在値(=表示コンテンツの始点)を設定します。
  5. SFYScrollBarControl::SetPageValue 関数を呼び出してページサイズ(=表示コンテンツの幅または項目数)を設定します。
  6. スクロールバーイベント [SFEVT_RESPONDER_SCROLLBAR]を受信したときに、 スクロールできない状態になったときはスクロールバーコントロールの状態を活性状態から不可視状態に変更し、 逆の場合は、不可視状態から活性状態に変更します。
  7. スクロールバーコントロールのデザインは、 SFYScrollBarControl::SetBevelColor / SFYScrollBarControl::SetTrackColor / SFYScrollBarControl::SetArrowColor 関数を呼び出して変更します。
  8. スクロールバーコントロールの垂直方向と水平方向の配置は、 SFYScrollBarControl::SetOrientation 関数を呼び出して変更します。
  9. 『ページサイズ ≧ {(最大値) - (最小値)} 』の場合、 スクロール不能状態にあり、サムは描画されません。このとき、『サムの長さ=トラックの長さ』となります。
[Note] ターゲットレスポンダの最小値、最大値、現在値、ページサイズについて

多くのレスポンダでは、 全体コンテンツの始点と終点の座標で最小値と最大値、表示コンテンツ(=実領域)の始点と幅で現在値とページサイズを表現します (いずれもローカル領域の座標系。スクロール方向が水平の場合は X 座標、垂直の場合は Y 座標。最小値は常に 0 です)。

ターゲットレスポンダの実領域や仮想領域が変更された場合、 全体コンテンツの始点や終点、表示コンテンツの始点や幅も変更されますので、 スクロールバーコントロールの最小値、最大値、現在値、ページサイズも更新する必要があります。

例外: SFZListBoxControl クラスでは、 全体コンテンツの項目数で最大値、表示コンテンツの先頭項目のインデックスで現在位置、 表示コンテンツの項目数でページサイズを表現します(最小値は常に 0)。

[Note] スクロールバーイベントについて

スクロールバーコントロールは、 ターゲットレスポンダがスクロール可能な状態からスクロール不可能な状態、あるいはその逆になったとき、 スクロールバーイベント [SFEVT_RESPONDER_SCROLLBAR] [SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0)] を受信します。

[Note] スクロール可能性の判定について

ターゲットレスポンダが現在スクロール可能であるかどうかは、 SFYScrollBarControl::IsScrollable 関数を使用して判定します。

[Note] スクロールバーコントロールの幅について

スクロールバーコントロールの幅として、4 ピクセル以上の値を指定できます。 減分・増分矢印を矩形領域内にバランス良く描画するには、5 以上の奇数を指定することを推奨します。

[Note] Increment / Decrement / SetScrollStepValue 関数について

スクロールバーコントロールを装着するレスポンダ(ターゲットレスポンダ) 側でスクロールバーコントロールの現在値を増減する場合、 SFYScrollBarControl::Increment / SFYScrollBarControl::Decrement / SFYScrollBarControl::SetScrollStepValue 関数は使用しません。

これらの関数は、 スクロールバーコントロール側からターゲットレスポンダをスクロールしたい場合に使用します。

通常、ターゲットレスポンダ側でスクロールさせますので、 これらの関数を使用する機会は少ないと考えられます。

■イベントハンドラ

表 246. 仮想関数名とデフォルトの動作

仮想関数名 デフォルトの動作 オーバーライト
SFYWidget::HandleBoundRequest 推奨
SFYWidget::HandleBoundOptimize 推奨
SFYControl::HandleBoundReal 仮想領域を実領域に一致させます。※1 任意
SFYScrollBarControl::HandleBoundVirtual スクロールバーを構成する部品の再配置します。 非推奨 (代わりに SFYScrollBarControl::RelocateTrackAndArrow 関数をオーバーライドします。)
SFYWidget::HandleBoundGlobal 任意
SFYWidget::HandleRenderRequest 必須
SFYScrollBarControl::RelocateTrackAndArrow トラック領域と矢印ラベル領域を再配置します。 推奨
[Note] 注釈

※1. SFYResponder::SetVirtualBound(SFXRectangle(SFXGrid::ZeroInstance(), GetRealBound().GetSize())) を実行します。

参照

SFYControl | SFZScrollBarControl | SFZContainerScrollBarControl | SFYControl::SetMinimumValue | SFYControl::SetMaximumValue | SFYControl::SetCurrentValue | SFYScrollBarControl::SetPageValue | SFYScrollBarControl::SetBevelColor | SFYScrollBarControl::SetTrackColor | SFYScrollBarControl::SetArrowColor | SFYScrollBarControl::SetOrientation | SFYScrollBarControl::IsScrollable | SFYResponder::SetRealBound | 実領域 | 仮想領域 | スクロールバーイベント [SFEVT_RESPONDER_SCROLLBAR]

メンバ

コンストラクタ/デストラクタ
SFYScrollBarControl( Void )
SFYScrollBarControl クラスのコンストラクタです。
~SFYScrollBarControl( Void )
SFYScrollBarControl クラスのデストラクタです。
パブリック関数
Bool Decrement( Void )
スクロールステップだけ現在値を減らします。
SFXRGBColorConstRef GetArrowColor( Void )
矢印の色を取得します。
SFXBevelColorConstRef GetBevelColor( Void )
スクロールバーの外枠を描画するためのベベルカラーを取得します。
OrientationEnum GetOrientation( Void )
スクロールバーの方向(垂直か水平)を取得します。
SInt32 GetPageValue( Void )
ページサイズを取得します。
SInt32 GetScrollStepValue( Void )
スクロールステップの値を取得します。
SFXRGBColorConstRef GetTrackColor( Void )
トラックの色を取得します。
Bool Increment( Void )
スクロールステップだけ現在値を増やします。
Bool IsScrollable( Void )
スクロール可能かどうかを判定します。
Void SetArrowColor( SFXRGBColorConstRef param )
矢印ラベルの色を設定します。
Void SetBevelColor( SFXBevelColorConstRef param )
スクロールバーの外枠を描画するためのベベルカラーを設定します。
Void SetOrientation( OrientationEnum param )
スクロールバーの方向(垂直か水平)を設定します。
Void SetPageValue( SInt32 param )
ページサイズを設定します。
Void SetScrollStepValue( SInt32 param )
スクロールステップを設定します。
Void SetTrackColor( SFXRGBColorConstRef param )
トラックの色を設定します。
Void ClearHandler( Void ) (SFYResponder から継承)
このレスポンダのハンドラの登録をすべて解除します。
Void ClearTracer( Void ) (SFYResponder から継承)
このレスポンダのトレーサの配信規則の登録をすべて解除します。
SFCError Distribute( SFXEventConstRef event , BoolPtr result = null ) (SFYResponder から継承)
指定された配信型イベントを SFYDistributer インスタンスと、このレスポンダ以下のレスポンダツリーに配信します。
SFXRGBColorConstRef GetBackgroundColor( Void ) (SFYWidget から継承)
背景の色を取得します。
SFYResponderSmp GetChildBack( Void ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBack( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBack( UInt32 id ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBack( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index , UInt32 id ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SInt32 GetChildCount( Void ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SInt32 GetChildCount( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SInt32 GetChildCount( UInt32 id ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SInt32 GetChildCount( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SFYResponderSmp GetChildForward( SInt32 index ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildForward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildForward( SInt32 index , UInt32 id ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildForward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( Void ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( UInt32 id ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SInt32 GetCurrentValue( Void ) (SFYControl から継承)
コントロールの現在値を取得します。
SFYDistributerPtr GetDistributer( Void ) (SFYResponder から継承)
このレスポンダに設定されている配信エンジンを取得します。
SFYResponderSmp GetFrame( Void ) (SFYResponder から継承)
このレスポンダに装着されたフレームを取得します。
SFXRectangle GetGlobalBound( Void ) (SFYResponder から継承)
このレスポンダのグローバル領域を取得します。
UInt32 GetID( Void ) (SFYResponder から継承)
このレスポンダの ID を取得します。
SFXRectangle GetLocalBound( Void ) (SFYResponder から継承)
このレスポンダのローカル領域を取得します。
SInt32 GetMaximumValue( Void ) (SFYControl から継承)
コントロールの最大値を取得します。
SInt32 GetMinimumValue( Void ) (SFYControl から継承)
コントロールの最小値を取得します。
SInt32 GetNthBackward( Void ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthBackward( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthBackward( UInt32 id ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthBackward( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( Void ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( UInt32 id ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SFYResponderSmp GetParent( Void ) (SFYResponder から継承)
このレスポンダの親レスポンダを取得します。
Bool GetPropertyTransparent( Void ) (SFYResponder から継承)
このレスポンダの透過属性を取得します。
SFXRectangleConstRef GetRealBound( Void ) (SFYResponder から継承)
このレスポンダの実領域を取得します。
VoidPtr GetReference( Void ) (SFYResponder から継承)
このレスポンダのリファレンス値を取得します。
SFYRendererPtr GetRenderer( Void ) (SFYResponder から継承)
このレスポンダに設定されている描画エンジンを取得します。
SFYResponderSmp GetRoot( Void ) (SFYResponder から継承)
このレスポンダが所属するレスポンダツリーのルートレスポンダを取得します。
Bool GetStateActive( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの活性状態を取得します。
Bool GetStateEnable( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの操作可能状態を取得します。
Bool GetStateFocus( Bool inherit = false ) (SFYResponder から継承)
このレスポンダのフォーカス状態を取得します。
Bool GetStateValid( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの有効状態を取得します。
Bool GetStateVisible( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの可視状態を取得します。
SFXRectangle GetSuitableBound( Void ) (SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
SFXRectangle GetSuitableBound( SFXRectangleConstRef rectangle ) (SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
SFXRectangle GetSuitableBound( SFXRectangleConstRef param , HorizontalEnum horizontal , VerticalEnum vertical ) (SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
SFXMargin GetSuitableMargin( Void ) (SFYResponder から継承)
このレスポンダのフレーム余白領域を取得します。
SFCType GetType( Void ) (SFYResponder から継承)
このレスポンダのタイプを取得します。
SFXRectangleConstRef GetVirtualBound( Void ) (SFYResponder から継承)
このレスポンダの仮想領域を取得します。
Bool HasFrame( Void ) (SFYResponder から継承)
このレスポンダがコンテントレスポンダであるかどうかを判定します。
Void Initialize( Void ) (SFYResponder から継承)
このレスポンダを初期化します。
Void Invalidate( Void ) (SFYResponder から継承)
指定された領域を再描画領域に登録します。
Void Invalidate( SFXRectangleConstRef param ) (SFYResponder から継承)
指定された領域を再描画領域に登録します。
Void InvokeBackward( SFXEventConstRef event , Bool overload , BoolPtr result = null ) (SFYResponder から継承)
指定されたコールバック型イベントをこのレスポンダに送信します (ハンドラは登録順に起動されます)。
Void InvokeForward( SFXEventConstRef event , Bool overload , BoolPtr result = null ) (SFYResponder から継承)
指定されたコールバック型イベントをこのレスポンダに送信します (ハンドラは登録の逆順に起動されます)。
Bool IsBack( Void ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsBack( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsBack( UInt32 id ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsBack( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsFrame( Void ) (SFYResponder から継承)
このレスポンダがアタッチメントフレームであるかどうかを判定します。
Bool IsFront( Void ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsFront( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsFront( UInt32 id ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsFront( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsRoot( Void ) (SFYResponder から継承)
このレスポンダがルートレスポンダであるかどうかを判定します。
SFCError Recover( Void ) (SFYResponder から継承)
デバイス画面保存用ビットマップを使用してこのレスポンダとレスポンダ空間との交差領域を復元します。
SFCError RegisterHandler( SFXEventRangeConstRef range , SFYHandler::RuleRecConstRef rule ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterHandler( SFXEventRangeConstRef range , SFYHandler::HandlerSPP spp , VoidPtr reference ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterHandler( SFXEventRangeConstPtr range , SFYHandler::RuleRecConstPtr rule , SInt32 length ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterHandler( SFXEventRangeConstPtr range , SFYHandler::HandlerSPPConstPtr spp , VoidPtrConstPtr reference , SInt32 length ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterTracer( SFXEventRangeConstRef range , SFYTracer::RuleRecConstRef rule ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError RegisterTracer( SFXEventRangeConstRef range , SFYTracer::OrderEnum order , SFYTracer::StateEnum state , Bool overload ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError RegisterTracer( SFXEventRangeConstPtr range , SFYTracer::RuleRecConstPtr rule , SInt32 length ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError RegisterTracer( SFXEventRangeConstPtr range , SFYTracer::OrderEnumConstPtr order , SFYTracer::StateEnumConstPtr state , BoolConstPtr overload , SInt32 length ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError Render( Bool force = false ) (SFYResponder から継承)
このレスポンダ以下のレスポンダツリーをレスポンダ空間に再描画します。
Void SetBackgroundColor( SFXRGBColorConstRef param ) (SFYWidget から継承)
背景の色を設定します。
Void SetCurrentValue( SInt32 param ) (SFYControl から継承)
コントロールの現在値を設定します。
Void SetDistributer( SFYDistributerPtr param ) (SFYResponder から継承)
指定された配信エンジンをこのレスポンダに設定します。
SFCError SetFrame( SFYResponderSmpConstRef param ) (SFYResponder から継承)
このレスポンダにフレームを装着します。
Void SetID( UInt32 param ) (SFYResponder から継承)
指定された ID をこのレスポンダに設定します。
Void SetMaximumValue( SInt32 param ) (SFYControl から継承)
コントロールの最大値を設定します。
Void SetMinimumValue( SInt32 param ) (SFYControl から継承)
コントロールの最小値を設定します。
SFCError SetParent( SFYResponderSmpConstRef param ) (SFYResponder から継承)
指定されたレスポンダをこのレスポンダの親レスポンダに設定します。
Void SetProperty( Bool transparent ) (SFYResponder から継承)
指定された属性をこのレスポンダに設定します。
Void SetPropertyTransparent( Bool param ) (SFYResponder から継承)
指定された透過属性をこのレスポンダに設定します。
Void SetRealBound( SFXRectangleConstRef param ) (SFYResponder から継承)
指定された領域をこのレスポンダの実領域に設定します。
Void SetReference( VoidPtr param ) (SFYResponder から継承)
指定された値をこのレスポンダのリファレンスに設定します。
Void SetRenderer( SFYRendererPtr param ) (SFYResponder から継承)
指定された描画エンジンをこのレスポンダに設定します。
Void SetState( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
指定された値をこのレスポンダの可視、活性、操作可能、フォーカスの各状態フラグに設定します。
Void SetStateActive( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダの活性状態フラグに設定します。
Void SetStateEnable( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダの操作可能状態フラグに設定します。
Void SetStateFocus( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダのフォーカス状態フラグに設定します。
Void SetStateVisible( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダの可視状態フラグに設定します。
Void SetVirtualBound( SFXRectangleConstRef param ) (SFYResponder から継承)
指定された領域をこのレスポンダの仮想領域に設定します。
SFCError Snapshot( SFBBitmapSmpConstRef bitmap ) (SFYResponder から継承)
デバイス画面保存用ビットマップからこのレスポンダとレスポンダ空間との交差領域のスナップショットを取得します。
Void Terminate( Void ) (SFYResponder から継承)
このレスポンダの終了処理を行います。
Void ToBack( Void ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
Void ToBack( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
Void ToBack( UInt32 id ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
Void ToBack( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
Void ToFront( Void ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
Void ToFront( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
Void ToFront( UInt32 id ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
Void ToFront( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
Void ToNthBackward( SInt32 index ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
Void ToNthBackward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
Void ToNthBackward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
Void ToNthBackward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
Void ToNthForward( SInt32 index ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
Void ToNthForward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
Void ToNthForward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
Void ToNthForward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
Void UnregisterHandler( SFXEventRangeConstRef range , SFYHandler::RuleRecConstRef rule ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterHandler( SFXEventRangeConstRef range , SFYHandler::HandlerSPP spp , VoidPtr reference ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterHandler( SFXEventRangeConstPtr range , SFYHandler::RuleRecConstPtr rule , SInt32 length ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterHandler( SFXEventRangeConstPtr range , SFYHandler::HandlerSPPConstPtr spp , VoidPtrConstPtr reference , SInt32 length ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterTracer( SFXEventRangeConstRef range ) (SFYResponder から継承)
このレスポンダのトレーサから指定された配信規則の登録を解除します。
Void UnregisterTracer( SFXEventRangeConstPtr range , SInt32 length ) (SFYResponder から継承)
このレスポンダのトレーサから指定された配信規則の登録を解除します。
プロテクト関数
Void DrawDecrement( SFXGraphicsPtr graphics )
減分矢印矩形領域を描画します。
Void DrawIncrement( SFXGraphicsPtr graphics )
増分矢印矩形領域を描画します。
Void DrawThumb( SFXGraphicsPtr graphics )
サム領域を描画します。
Void DrawTrack( SFXGraphicsPtr graphics )
トラックを描画します。
SFXRectangleConstRef GetDecrementArrowRectangle( Void )
減分矢印矩形領域を取得します。
SFXRectangleConstRef GetIncrementArrowRectangle( Void )
増分矢印矩形領域を取得します。
SInt16 GetScrollRange( Void )
スクロールレンジを取得します。
SInt16 GetThumbLength( Void )
サムの長さを取得します。
SFXRectangle GetThumbRectangle( Void )
サム領域を取得します。
SInt16 GetThumbTop( Void )
サムトップの位置を取得します。
SFXRectangleConstRef GetTrackRectangle( Void )
トラック領域を取得します。
Void HandleBoundVirtual( Void )
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL) イベントを受信したときに呼び出される関数です (仮想領域が変化したときの処理を行います)。
Void HandleScrollable( Void )
スクロール可能状態が変化したときに呼び出される関数です。
Void RelocateTrackAndArrow( Void )
トラック矩形領域と減分・増分矢印矩形領域を再配置します。
Void SetDecrementArrowRectangle( SFXRectangleConstRef param )
減分矢印矩形領域を設定します。
Void SetIncrementArrowRectangle( SFXRectangleConstRef param )
増分矢印矩形領域を設定します。
Void SetTrackRectangle( SFXRectangleConstRef param )
トラック領域を設定します。
static
SFYResponderSmp
Factory( SFYResponderPtr responder , SFCErrorPtr exception = null ) (SFYResponder から継承)
NewInstance 関数の実装を補助します。
SFYResponderSmp GetThis( Void ) (SFYResponder から継承)
このレスポンダのスマートポインタを取得します。
Void HandleBoundGlobal( SFXRectangleConstRef rectangle ) (SFYWidget から継承)
[非推奨(廃止予定 API)] グローバル領域が変化したときに呼び出される関数です。
Void HandleBoundOptimize( SFXRectanglePtr rectangle ) (SFYWidget から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_OPTIMIZE) イベントを受信したときに呼び出される関数です(指定した矩形に収まる範囲内で最適な領域を計算します)。
Void HandleBoundReal( Void ) (SFYControl から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REAL) イベントを受信したときに呼び出される関数です (実領域が変化したときの処理を行います)。
Void HandleBoundRequest( SFXRectanglePtr rectangle ) (SFYWidget から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REQUEST) イベントを受信したときに呼び出される関数です(最適な領域を計算します)。
Void HandleRenderRequest( SFXGraphicsPtr graphics ) (SFYWidget から継承)
描画イベントを受信したときに呼び出される関数です(レスポンダを描画します)。
Void SetType( SFCType param ) (SFYResponder から継承)
指定された値をこのレスポンダのタイプに設定します。
CodeEnum
SFYScrollBarControl クラスを表す定数です。
OrientationEnum
スクロールバーの方向を表す定数です。
HorizontalEnum (SFYResponder から継承)
水平方向のアライメントを表す定数です。
VerticalEnum (SFYResponder から継承)
垂直方向のアライメントを表す定数です。

SFYScrollBarControl::SFYScrollBarControl
SFYScrollBarControl クラスのコンストラクタです。
[ protected, explicit ]
SFYScrollBarControl(Void);

解説

このコンストラクタは、以下の初期化処理を行います。

  1. タイプを ".scr" に設定します。
  2. スクロールバーの外枠を描画するためのベベルカラーを SFXBevelColor(SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00), SFXRGBColor(0xCC, 0xCC, 0xCC, 0x00), SFXRGBColor(0x88, 0x88, 0x88, 0x00)) に設定します。
  3. トラックの色を SFXRGBColor(0xF0, 0xF0, 0xF0, 0x00)[薄灰色] に設定します。
  4. 矢印ラベルの色を SFXRGBColor(0x00, 0x00, 0x00, 0x00)[黒色] に設定します。
  5. 最小値、最大値、現在値を 0 に設定します。
  6. ページサイズを 0 に設定します。
  7. スクロールステップの値を 0 に設定します。
  8. スクロールバーの方向を SFYScrollBarControl::DEFAULT_ORIENTATION に設定します。
  9. サムトップの位置を 0 に設定します。
  10. サムトップの長さを 0 に設定します。
  11. スクロールレンジを 0 に設定します。
  12. スクロール可能状態を "false" に設定します。
  13. 下表にあるハンドラをレスポンダに登録します。

表 247. イベントハンドラ

イベント ハンドラの内容
最小値または最大値が変更された時に発生する値イベント[SFEVT_RESPONDER_VALUE] スクロール可能状態が変化したときは SFYScrollBarControl::HandleScrollable 関数を呼び出す。 また、このスクロールバーコントロールを再配置する。
現在値が変更された時に発生する値イベント[SFEVT_RESPONDER_VALUE] サムトップを再配置する。
[Note] 注意
SFYScrollBarControl クラスを継承するレスポンダでは、 上記イベントが発生すると、それに対応するハンドラが呼び出されます。

内部実装

このコンストラクタの内部実装は以下の通りです。

/*public */SFYScrollBarControl::SFYScrollBarControl(Void) static_throws
{
    static SFXEventRange::AtomRecConst          range[] = {
        { SFEVT_RESPONDER_VALUE,  SFEVT_RESPONDER_VALUE,  SFP16_VALUE_MAXIMUM,  SFP16_VALUE_CURRENT}
    };
    SFYHandler::RuleRec                         rule[lengthof(range)];

    if (static_try()) {
        SetType(CODE_TYPE);
        rule[0].spp = XANDLER_FUNCTION(OnValue);
        rule[0].reference = this;
        static_throw(RegisterHandler(atomic_cast(range), rule, lengthof(range)));
        if (static_try()) {
            static SFXRGBColor::AtomRecConst    theme[] = {
                {{{0x00, 0xFF, 0xFF, 0xFF}}},
                {{{0x00, 0xCC, 0xCC, 0xCC}}},
                {{{0x00, 0x88, 0x88, 0x88}}},
                {{{0x00, 0xF0, 0xF0, 0xF0}}},
                {{{0x00, 0x00, 0x00, 0x00}}}
            };
            _color.bevel.Set(theme[0], theme[1], theme[2]);
            _color.track.Set(theme[3]);
            _color.arrow.Set(theme[4]);
            SetMinimumValue(0);
            SetMaximumValue(0);
            SetCurrentValue(0);
            _pagesize = 0;
            _scrollstep = 0;
            _scrollbar.orient = DEFAULT_ORIENTATION;
            _scrollbar.thumbTop = 0;
            _scrollbar.thumbLength = 0;
            _scrollbar.scrollRange = 0;
            _scrollable = false;
        }
    }
}// SFYScrollBarControl::SFYScrollBarControl //

/*private */XANDLER_IMPLEMENT_VOIDVALUE(SFYScrollBarControl, OnValue, invoker, reason, value)
{
    unused(invoker); unused(value);
    switch (reason) {
        case SFP16_VALUE_MAXIMUM:
        case SFP16_VALUE_MINIMUM:
            QueryScrollable();
            RelocateThumb();
            break;
        case SFP16_VALUE_CURRENT:
            RelocateThumbTop();
            break;
        default:
            break;
    }
    Invalidate();
    return;
}// XANDLER_IMPLEMENT_VOIDSTATE(SFYScrollBarControl, OnValue) //

/*private */Void SFYScrollBarControl::QueryScrollable(Void)
{
    SInt32Const                                 min(GetMinimumValue());
    SInt32Const                                 max(GetMaximumValue());

    if (((max > min) && (max - min > _pagesize)) ^ !(!_scrollable)) {
        _scrollable = !_scrollable;
        HandleScrollable();
    }
    return;
}// SFYScrollBarControl::QueryScrollable //

/*protected virtual */Void SFYScrollBarControl::HandleScrollable(Void)
{
    InvokeBackward(SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0), true);
    return;
}// SFYScrollBarControl::HandleScrollable //

/*private */Void SFYScrollBarControl::RelocateThumb(Void)
{
    if (IsScrollable()) {
        RelocateThumbLength();
        RelocateThumbTop();
    }
    else {
        _scrollbar.thumbLength = 0;
    }
    return;
}// SFYScrollBarControl::RelocateThumb //

/*private */Void SFYScrollBarControl::RelocateThumbLength(Void)
{
    SInt32Const                                 min(GetMinimumValue());
    SInt32Const                                 max(GetMaximumValue());
    SFXRectangleConst                           rc(GetLocalBound());
    SInt16                                      track;

    track = (_scrollbar.orient == VERTICAL) ? _track.GetHeight() : _track.GetWidth();
    track = (track > 0) ? track : 0;
    _scrollbar.thumbLength = static_cast<SInt16>(track * _pagesize / (max - min));
    if ((_scrollbar.thumbLength < MINIMUM_THUMB_LENGTH) && (MINIMUM_THUMB_LENGTH < track)) {
        _scrollbar.thumbLength = MINIMUM_THUMB_LENGTH;
    }
    _scrollbar.scrollRange = track - _scrollbar.thumbLength;
    return;
}// SFYScrollBarControl::RelocateThumbLength //

/*private */ Void SFYScrollBarControl::RelocateThumbTop(Void)
{
    SInt32Const                                 cur(GetCurrentValue());
    SInt32Const                                 min(GetMinimumValue());
    SInt32Const                                 max(GetMaximumValue());

    if (max - min > _pagesize) { // This is always true. //
        _scrollbar.thumbTop = static_cast<SInt16>(_scrollbar.scrollRange * (cur - min) / (max - min - _pagesize));
    }
    else {
        _scrollbar.thumbTop = 0;
    }
    return;
}// SFYScrollBarControl::RelocateThumbTop //

参照

SFYResponder::SetType | SFYScrollBarControl::CodeEnum | SFYScrollBarControl::SetBevelColor | SFYScrollBarControl::SetTrackColor | SFYScrollBarControl::SetArrowColor | SFYScrollBarControl::SetPageValue | SFYScrollBarControl::SetScrollStepValue | SFYScrollBarControl::SetOrientation | SFYScrollBarControl::OrientationEnum | SFYScrollBarControl::GetThumbTop | SFYScrollBarControl::GetThumbLength | SFYScrollBarControl::GetScrollRange | SFYScrollBarControl::IsScrollable | SFYScrollBarControl::HandleScrollable | SFYControl::SetMinimumValue | SFYControl::SetMaximumValue | SFYControl::SetCurrentValue | SFXBevelColor | SFXRGBColor | SFXEvent | タイプ | 状態 | イベント | 値イベント[SFEVT_RESPONDER_VALUE]


SFYScrollBarControl::~SFYScrollBarControl
SFYScrollBarControl クラスのデストラクタです。
[ protected, virtual ]
virtual ~SFYScrollBarControl(Void);

解説

このデストラクタは、何も行いません。

内部実装

このデストラクタの内部実装は以下の通りです。

/*public virtual */SFYScrollBarControl::~SFYScrollBarControl(Void)
{
}// SFYScrollBarControl::~SFYScrollBarControl //

SFYScrollBarControl::Decrement
スクロールステップだけ現在値を減らします。
[ public ]
Bool Decrement(Void);

解説

この関数は、SFYScrollBarControl::SetScrollStepValue 関数で設定したスクロールステップだけ現在値を減らします。

このスクロールバーコントロールは、 値イベント [SFXEvent(SFEVT_RESPONDER_VALUE, SFP16_VALUE_CURRENT, 新しい現在値)] を受信します。

[Note] 注意

スクロールバーコントロールを装着するレスポンダ(ターゲットレスポンダ) 側でスクロールバーコントロールの現在値を設定する場合、 この関数は使用しません。

この関数は、 スクロールバーコントロール側からターゲットレスポンダをスクロールしたい場合に使用します。

通常、ターゲットレスポンダ側でスクロールさせますので、 この関数を使用する機会は少ないと考えられます。

内部実装

この関数の内部実装は以下の通りです。

/*public */Bool SFYScrollBarControl::Decrement(Void)
{
    SInt32                                      cur(GetCurrentValue());
    SInt32                                      min(GetMinimumValue());
    Bool                                        result(true);

    if (cur > min) {
        cur -= _scrollstep;
        cur = (cur > min) ? cur : min;
        SetCurrentValue(cur);
    }
    else {
        SetCurrentValue(min);
        result = false;
    }
    return result;
}// SFYScrollBarControl::Decrement //

参照

SFYScrollBarControl::SetScrollStepValue | SFYScrollBarControl::Increment | 値イベント[SFEVT_RESPONDER_VALUE]


SFYScrollBarControl::DrawDecrement
減分矢印矩形領域を描画します。
[ protected, const ]
Void DrawDecrement(
    SFXGraphicsPtr graphics   // グラフィックスオブジェクト
);

解説

この関数は、減分矢印矩形領域を描画します。

独自の処理を行う場合は、この関数をオーバーライドします。

[Tip] Tip
この関数は、SFZScrollBarControl::HandleRenderRequest 関数内で呼び出されます。

内部実装

この関数の内部実装は以下の通りです。

enum {
        MINIMUM_THUMB_LENGTH             = 2,
        MINIMUM_MINOR_AXIS_SIZE          = 2,
        INACTIVE_ARROW                   = 0x66
};

/*protected */Void SFYScrollBarControl::DrawDecrement(SFXGraphicsPtr graphics) const
{
    SFXRGBColor                                 arrow(GetArrowColor());
    SFXBevelColor                               bevel(GetBevelColor());
    SFXRectangleConstRef                        rc(GetDecrementArrowRectangle());

    if (!rc.IsEmpty()) {
        if (!GetStateActive(true) || !IsScrollable()) {
            bevel.SetDark(bevel.GetBase());
            bevel.SetLight(bevel.GetBase());
            (arrow.GetBrightness() > 0x7F) ? arrow.SubRGB(INACTIVE_ARROW) : arrow.AddRGB(INACTIVE_ARROW);
        }
        if (GetOrientation() == VERTICAL) {
            graphics->FillBevelRectangle(rc, bevel);
            graphics->FillTriangle(CalculateTriangle(rc, SCROLL_UP), arrow);
        }
        else {
            graphics->FillBevelRectangle(rc, bevel);
            graphics->FillTriangle(CalculateTriangle(rc, SCROLL_LEFT), arrow);
        }
    }
    return;
}// SFYScrollBarControl::DrawDecrement

/*private */SFXTriangle SFYScrollBarControl::CalculateTriangle(SFXRectangleConstRef rect, ScrollDirectionEnum direction) const
{
    SInt16                                      w;
    SInt16                                      h;
    SFXRectangle                                temp(rect);

    if (direction == SCROLL_UP || direction == SCROLL_DOWN) {
        h = rect.GetHeight() / 4;
        w = h * 2;
    }
    else {
        w = rect.GetWidth() / 4;
        h = w * 2;
    }
    temp.SetSize(w, h);
    temp.Offset((rect.GetWidth() - w - 1) / 2, (rect.GetHeight() - h - 1) / 2);
    return InscribedTriangle(temp, direction);
}// SFZSoftKeyControl::CalculateTriangle //

/*private */SFXTriangle SFYScrollBarControl::InscribedTriangle(SFXRectangleConstRef rect, ScrollDirectionEnum direction) const
{
    SFXTriangle                                 result;
    SInt16                                      x(rect.GetX());
    SInt16                                      y(rect.GetY());
    SInt16                                      w(rect.GetWidth());
    SInt16                                      h(rect.GetHeight());

    switch (direction) {
        case SCROLL_UP:
            result.Set(x + w / 2, y, x, y + h, x + w, y + h);
            break;
        case SCROLL_DOWN:
            result.Set(x, y, x + w, y, x + w / 2, y + h);
            break;
        case SCROLL_LEFT:
            result.Set(x + w, y, x, y + h / 2, x + w, y + h);
            break;
        case SCROLL_RIGHT:
            result.Set(x, y, x, y + h, x + w, y + h / 2);
            break;
    }
    return result;
}// SFYScrollBarControl::InscribedTriangle //

参照

SFZScrollBarControl::HandleRenderRequest | SFYScrollBarControl::DrawTrack | SFYScrollBarControl::DrawIncrement | SFYScrollBarControl::DrawThumb


SFYScrollBarControl::DrawIncrement
増分矢印矩形領域を描画します。
[ protected, const ]
Void DrawIncrement(
    SFXGraphicsPtr graphics   // グラフィックスオブジェクト
);

解説

この関数は、増分矢印矩形領域を描画します。

独自の処理を行う場合は、この関数をオーバーライドします。

[Tip] Tip
この関数は、SFZScrollBarControl::HandleRenderRequest 関数内で呼び出されます。

内部実装

この関数の内部実装は以下の通りです。

enum {
        MINIMUM_THUMB_LENGTH             = 2,
        MINIMUM_MINOR_AXIS_SIZE          = 2,
        INACTIVE_ARROW                   = 0x66
};

/*protected */Void SFYScrollBarControl::DrawIncrement(SFXGraphicsPtr graphics) const
{
    SFXRGBColor                                 arrow(GetArrowColor());
    SFXBevelColor                               bevel(GetBevelColor());
    SFXRectangleConstRef                        rc(GetIncrementArrowRectangle());

    if (!rc.IsEmpty()) {
        if (!GetStateActive(true) || !IsScrollable()) {
            bevel.SetDark(bevel.GetBase());
            bevel.SetLight(bevel.GetBase());
            (arrow.GetBrightness() > 0x7F) ? arrow.SubRGB(INACTIVE_ARROW) : arrow.AddRGB(INACTIVE_ARROW);
        }
        if (GetOrientation() == VERTICAL) {
            graphics->FillBevelRectangle(rc, bevel);
            graphics->FillTriangle(CalculateTriangle(rc, SCROLL_DOWN), arrow);
        }
        else {
            graphics->FillBevelRectangle(rc, bevel);
            graphics->FillTriangle(CalculateTriangle(rc, SCROLL_RIGHT), arrow);
        }
    }
    return;
}// SFYScrollBarControl::DrawIncrement //

/*private */SFXTriangle SFYScrollBarControl::CalculateTriangle(SFXRectangleConstRef rect, ScrollDirectionEnum direction) const
{
    SInt16                                      w;
    SInt16                                      h;
    SFXRectangle                                temp(rect);

    if (direction == SCROLL_UP || direction == SCROLL_DOWN) {
        h = rect.GetHeight() / 4;
        w = h * 2;
    }
    else {
        w = rect.GetWidth() / 4;
        h = w * 2;
    }
    temp.SetSize(w, h);
    temp.Offset((rect.GetWidth() - w - 1) / 2, (rect.GetHeight() - h - 1) / 2);
    return InscribedTriangle(temp, direction);
}// SFZSoftKeyControl::CalculateTriangle //

/*private */SFXTriangle SFYScrollBarControl::InscribedTriangle(SFXRectangleConstRef rect, ScrollDirectionEnum direction) const
{
    SFXTriangle                                 result;
    SInt16                                      x(rect.GetX());
    SInt16                                      y(rect.GetY());
    SInt16                                      w(rect.GetWidth());
    SInt16                                      h(rect.GetHeight());

    switch (direction) {
        case SCROLL_UP:
            result.Set(x + w / 2, y, x, y + h, x + w, y + h);
            break;
        case SCROLL_DOWN:
            result.Set(x, y, x + w, y, x + w / 2, y + h);
            break;
        case SCROLL_LEFT:
            result.Set(x + w, y, x, y + h / 2, x + w, y + h);
            break;
        case SCROLL_RIGHT:
            result.Set(x, y, x, y + h, x + w, y + h / 2);
            break;
    }
    return result;
}// SFYScrollBarControl::InscribedTriangle //

参照

SFZScrollBarControl::HandleRenderRequest | SFYScrollBarControl::DrawTrack | SFYScrollBarControl::DrawDecrement | SFYScrollBarControl::DrawThumb


SFYScrollBarControl::DrawThumb
サム領域を描画します。
[ protected, const ]
Void DrawThumb(
    SFXGraphicsPtr graphics   // グラフィックスオブジェクト
);

解説

この関数は、サム領域を描画します。

独自の処理を行う場合は、この関数をオーバーライドします。

[Tip] Tip

この関数は、SFZScrollBarControl::HandleRenderRequest 関数内で呼び出されます。

[Note] 注意

『ページサイズ ≧ {(最大値) - (最小値)} 』の場合、 スクロール不可能状態になり、サム領域は描画されません。

内部実装

この関数の内部実装は以下の通りです。

/*protected */Void SFYScrollBarControl::DrawThumb(SFXGraphicsPtr graphics) const
{
    SFXBevelColor                               bevel(GetBevelColor());

    if (IsScrollable()) {
        if (!GetStateActive(true)) {
            bevel.SetDark(bevel.GetBase());
            bevel.SetLight(bevel.GetBase());
        }
        graphics->FillBevelRectangle(GetThumbRectangle(), bevel);
    }
    return;
}// SFYScrollBarControl::DrawThumb

参照

SFZScrollBarControl::HandleRenderRequest | SFYScrollBarControl::DrawTrack | SFYScrollBarControl::DrawDecrement | SFYScrollBarControl::DrawIncrement


SFYScrollBarControl::DrawTrack
トラックを描画します。
[ protected, const ]
Void DrawTrack(
    SFXGraphicsPtr graphics   // グラフィックスオブジェクト
);

解説

この関数は、トラック(厳密には全体部分)を描画します。

スクロールバーの下地を塗りつぶすときに利用します。

独自の処理を行う場合は、この関数をオーバーライドします。

[Tip] Tip
この関数は、SFZScrollBarControl::HandleRenderRequest 関数内で呼び出されます。

内部実装

この関数の内部実装は以下の通りです。

/*protected */Void SFYScrollBarControl::DrawTrack(SFXGraphicsPtr graphics) const
{
    graphics->FillRectangle(GetTrackRectangle(), GetTrackColor());
    return;
}// SFYScrollBarControl::DrawTrack //

参照

SFZScrollBarControl::HandleRenderRequest | SFYScrollBarControl::DrawDecrement | SFYScrollBarControl::DrawIncrement | SFYScrollBarControl::DrawThumb


SFYScrollBarControl::GetArrowColor
矢印の色を取得します。
[ public, const ]
SFXRGBColorConstRef GetArrowColor(Void);

戻り値

増分 / 減分矢印(三角形部分)の色。

解説

この関数は、矢印の色を取得します。

参照

SFYScrollBarControl::SetArrowColor | SFXRGBColor


SFYScrollBarControl::GetBevelColor
スクロールバーの外枠を描画するためのベベルカラーを取得します。
[ public, const ]
SFXBevelColorConstRef GetBevelColor(Void);

戻り値

スクロールバーの外枠を描画するためのベベルカラー(SFXBevelColor)。

解説

この関数は、スクロールバーの外枠を描画するためのベベルカラーを取得します。

参照

SFYScrollBarControl::SetBevelColor | SFXBevelColor


SFYScrollBarControl::GetDecrementArrowRectangle
減分矢印矩形領域を取得します。
[ protected, const ]
SFXRectangleConstRef GetDecrementArrowRectangle(Void);

戻り値

減分矢印ラベルの領域。

解説

この関数は、減分矢印矩形領域を取得します。

参照

SFYScrollBarControl::SetDecrementArrowRectangle


SFYScrollBarControl::GetIncrementArrowRectangle
増分矢印矩形領域を取得します。
[ protected, const ]
SFXRectangleConstRef GetIncrementArrowRectangle(Void);

戻り値

増分矢印ラベルの領域。

解説

この関数は、増分矢印矩形領域を取得します。

参照

SFYScrollBarControl::SetIncrementArrowRectangle


SFYScrollBarControl::GetOrientation
スクロールバーの方向(垂直か水平)を取得します。
[ public ]
OrientationEnum GetOrientation(Void);

戻り値

スクロールバーの方向(SFYScrollBarControl::HORIZONTAL または SFYScrollBarControl::VERTICAL)。

解説

この関数は、スクロールバーの方向(垂直か水平)を取得します。

参照

SFYScrollBarControl::SetOrientation | SFYScrollBarControl::OrientationEnum


SFYScrollBarControl::GetPageValue
ページサイズを取得します。
[ public ]
SInt32 GetPageValue(Void);

戻り値

ページサイズ。

解説

この関数は、ページサイズを取得します。

ページサイズはサムの長さに対応します。

実際のサムの長さは SFYScrollBarControl::GetThumbLength 関数を呼び出して取得します。

参照

SFYScrollBarControl::SetPageValue | SFYScrollBarControl::GetThumbLength


SFYScrollBarControl::GetScrollRange
スクロールレンジを取得します。
[ protected ]
SInt16 GetScrollRange(Void);

戻り値

スクロールレンジ。

解説

この関数は、スクロールレンジを取得します。

[Note] 注意

スクロールレンジは、トラックの長さからサムの長さを減算した値です。


SFYScrollBarControl::GetScrollStepValue
スクロールステップの値を取得します。
[ public ]
SInt32 GetScrollStepValue(Void);

戻り値

スクロールステップの値。

解説

この関数は、スクロールステップの値を取得します。

参照

SFYScrollBarControl::SetScrollStepValue


SFYScrollBarControl::GetThumbLength
サムの長さを取得します。
[ protected ]
SInt16 GetThumbLength(Void);

戻り値

サムラベルの長さ。

解説

この関数は、サムの長さを取得します。

[Note] 注意

サムの長さは、 SFYScrollBarControl::SetPageValue 関数を使用して設定するページサイズに対応します。

『ページサイズ ≧ {(最大値) - (最小値)} 』の場合、 スクロール不能状態にあり、サムは描画されません。このとき、『サムの長さ=トラックの長さ』となります。

『ページサイズ < {(最大値) - (最小値)} 』の場合、 スクロール可能であり、サムの長さは以下の値になります。

サムの長さ = max(トラックの長さ * ページサイズ / {(最大値) - (最小値)}, 2) // max(a, b) は、a と b の大きい方を表します

なお、最大値 / 最小値は、 SFYControl::SetMaximumValue / SFYControl::SetMinimumValue 関数を使用して設定します。 通常、最小値はデフォルト値の 0 を使用します。 最大値は、スクロールバーに表示する対象がコンテナ系レスポンダの場合は、 レスポンダ領域終端のローカル座標系の X または Y 座標の値になります(スクロール方向が水平の場合は X 座標、垂直の場合は Y 座標)。

トラックの長さは、スクロールバーコントロール矩形領域の長さから減分矢印矩形領域と増分矢印矩形領域の長さを減算した値になります (スクロール方向が水平の場合は X 成分の長さ、垂直の場合は Y 成分の長さ)。

参照

SFYScrollBarControl::SetPageValue | SFYControl::SetMaximumValue | SFYControl::SetMinimumValue


SFYScrollBarControl::GetThumbRectangle
サム領域を取得します。
[ protected, const ]
SFXRectangle GetThumbRectangle(Void);

戻り値

サム領域。

解説

この関数は、サム領域を取得します。


SFYScrollBarControl::GetThumbTop
サムトップの位置を取得します。
[ protected ]
SInt16 GetThumbTop(Void);

戻り値

サムトップの位置(垂直スクロールバーの場合は Y 座標の値、水平スクロールバーの場合は X 座標の値)。

解説

この関数は、サムトップの位置を取得します。

[Note] 注意

原点は、減分矢印とトラックの境界となります。


SFYScrollBarControl::GetTrackColor
トラックの色を取得します。
[ public, const ]
SFXRGBColorConstRef GetTrackColor(Void);

戻り値

トラック矩形を塗り潰す色。

解説

この関数は、トラック矩形を塗り潰す色を取得します。

参照

SFYScrollBarControl::SetTrackColor | SFXRGBColor


SFYScrollBarControl::GetTrackRectangle
トラック領域を取得します。
[ protected, const ]
SFXRectangleConstRef GetTrackRectangle(Void);

戻り値

トラック領域。

解説

この関数は、トラック領域を取得します。

[Note] 注意

トラック領域は、 スクロールバーコントロール矩形領域から減分矢印矩形領域と増分矢印矩形領域を除いた領域になります

詳細は、SFYScrollBarControl::RelocateTrackAndArrow 関数の内部実装コードを参照してください。

参照

SFYScrollBarControl::SetTrackRectangle | SFYScrollBarControl::GetDecrementArrowRectangle | SFYScrollBarControl::GetIncrementArrowRectangle


SFYScrollBarControl::HandleBoundVirtual
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL) イベントを受信したときに呼び出される関数です (仮想領域が変化したときの処理を行います)。
[ protected, virtual ]
Void HandleBoundVirtual(Void);

解説

この関数は、領域イベント [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, rectangle)] を受信したときに呼び出されます。

仮想領域の変更時に追加の処理を行いたい場合は、この関数をオーバーライドします。

デフォルトの実装は、スクロールバー部品を再配置させます。

[Note] 領域イベント[(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL) イベント]

SFYResponder::SetRealBound / SFYResponder::SetVirtualBound 関数は、 この関数内の処理により仮想領域が変化すると、 領域イベント [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, rectangle)] をレスポンダに送信します。

SFYWidget クラスを継承するレスポンダが領域イベントを受信すると、 SFYWidget::SFYWidget コンストラクタで最初に登録した領域イベント専用ハンドラの処理により、 SFYWidget::HandleBoundVirtual 仮想関数が呼び出されます。

※ 領域イベントの P32 パラメータ rectangle には変更後の仮想領域が設定されています。

[Note] 仮想領域の変更処理

SFYWidget::HandleBoundVirtual 仮想関数をオーバーライドする以外に、 領域イベント専用ハンドラ[XANDLER_DECLARE_VOIDBOUND]を定義・実装し レスポンダに登録して行うことも可能です。

仮想領域の変更処理は、最初に SFYWidget::HandleBoundVirtual 仮想関数を実行し、 次に領域イベント専用ハンドラを登録した順に実行して行われます。

領域イベント専用ハンドラを宣言し登録する手間が省けるので、 通常は SFYWidget::HandleBoundVirtual 仮想関数をオーバーライドして処理を記述します。

内部実装

この関数の内部実装は以下の通りです。

enum {
        MINIMUM_THUMB_LENGTH             = 2,
        MINIMUM_MINOR_AXIS_SIZE          = 2,
        INACTIVE_ARROW                   = 0x66
};

/*protected virtual */Void SFYScrollBarControl::HandleBoundVirtual(Void)
{
    Relocate();
    return;
}// SFYScrollBarControl::HandleBoundVirtual //

/*private */Void SFYScrollBarControl::Relocate(Void)
{
    RelocateTrackAndArrow();
    RelocateThumb();
    return;
}// SFYScrollBarControl::Relocate //

/*private */Void SFYScrollBarControl::RelocateThumbLength(Void)
{
    SInt32Const                                 min(GetMinimumValue());
    SInt32Const                                 max(GetMaximumValue());
    SFXRectangleConst                           rc(GetLocalBound());
    SInt16                                      track;

    track = (_scrollbar.orient == VERTICAL) ? _track.GetHeight() : _track.GetWidth();
    track = (track > 0) ? track : 0;
    _scrollbar.thumbLength = static_cast<SInt16>(track * _pagesize / (max - min));
    if ((_scrollbar.thumbLength < MINIMUM_THUMB_LENGTH) && (MINIMUM_THUMB_LENGTH < track)) {
        _scrollbar.thumbLength = MINIMUM_THUMB_LENGTH;
    }
    _scrollbar.scrollRange = track - _scrollbar.thumbLength;
    return;
}// SFYScrollBarControl::RelocateThumbLength //

/*private */ Void SFYScrollBarControl::RelocateThumbTop(Void)
{
    SInt32Const                                 cur(GetCurrentValue());
    SInt32Const                                 min(GetMinimumValue());
    SInt32Const                                 max(GetMaximumValue());

    if (max - min > _pagesize) { // This is always true. //
        _scrollbar.thumbTop = static_cast<SInt16>(_scrollbar.scrollRange * (cur - min) / (max - min - _pagesize));
    }
    else {
        _scrollbar.thumbTop = 0;
    }
    return;
}// SFYScrollBarControl::RelocateThumbTop //

参照

SFYResponder::SetRealBound | SFYResponder::SetVirtualBound | 領域イベント[SFEVT_RESPONDER_BOUND]


SFYScrollBarControl::HandleScrollable
スクロール可能状態が変化したときに呼び出される関数です。
[ protected, virtual ]
Void HandleScrollable(Void);

解説

この関数は、スクロール可能状態が変化したときに呼び出されます。

独自の処理を行いたい場合は、この関数をオーバーライドします。

デフォルトの実装は、 スクロールバーイベント [SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0)] を送信します。

内部実装

この関数の内部実装は以下の通りです。

/*protected virtual */Void SFYScrollBarControl::HandleScrollable(Void)
{
    InvokeBackward(SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0), true);
    return;
}// SFYScrollBarControl::HandleScrollable //

参照

SFXEvent | スクロールバーイベント [SFEVT_RESPONDER_SCROLLBAR]


SFYScrollBarControl::Increment
スクロールステップだけ現在値を増やします。
[ public ]
Bool Increment(Void);

解説

この関数は、SFYScrollBarControl::SetScrollStepValue 関数で設定したスクロールステップだけ現在値を増やします。

このスクロールバーコントロールは、 値イベント [SFXEvent(SFEVT_RESPONDER_VALUE, SFP16_VALUE_CURRENT, 新しい現在値)] を受信します。

[Note] 注意

スクロールバーコントロールを装着するレスポンダ(ターゲットレスポンダ) 側でスクロールバーコントロールの現在値を設定する場合、 この関数は使用しません。

この関数は、 スクロールバーコントロール側からターゲットレスポンダをスクロールしたい場合に使用します。

通常、ターゲットレスポンダ側でスクロールさせますので、 この関数を使用する機会は少ないと考えられます。

内部実装

この関数の内部実装は以下の通りです。

/*public */Bool SFYScrollBarControl::Increment(Void)
{
    SInt32                                      cur(GetCurrentValue());
    SInt32                                      max(GetMaximumValue());
    Bool                                        result(true);

    if (cur < max) {
        cur += _scrollstep;
        cur = (cur < max) ? cur : max;
        SetCurrentValue(cur);
    }
    else {
        SetCurrentValue(max);
        result = false;
    }
    return result;
}// SFYScrollBarControl::Increment //

参照

SFYScrollBarControl::SetScrollStepValue | SFYScrollBarControl::Decrement | 値イベント[SFEVT_RESPONDER_VALUE]


SFYScrollBarControl::IsScrollable
スクロール可能かどうかを判定します。
[ public, const ]
Bool IsScrollable(Void);

戻り値

  • 何れかの方向にスクロール可能であるとき: true
  • そうでないとき: false

解説

この関数は、スクロール可能かどうかを判定します。

内部実装

この関数の内部実装は以下の通りです。

/*public */inline Bool SFYScrollBarControl::IsScrollable(Void) const
{
    return _scrollable;
}// SFYScrollBarControl::IsScrollable //

SFYScrollBarControl::RelocateTrackAndArrow
トラック矩形領域と減分・増分矢印矩形領域を再配置します。
[ protected, virtual ]
Void RelocateTrackAndArrow(Void);

解説

この関数は、トラック矩形領域と減分・増分矢印矩形領域を再配置します。

デフォルトの実装は、 ローカル領域と方向 (orientation) を元に減分矢印矩形領域、トラック矩形領域、増分矢印矩形領域を順番に並べて再配置します。

スクロールバーコントロールでは、 SFYScrollBarControl::HandleBoundVirtual 関数のオーバーライドは非推奨です。 トラック矩形領域や減分・増分矢印矩形領域の大きさや配置を変更するには、この関数をオーバーライドします。

デフォルトの実装

/*protected virtual */Void SFYScrollBarControl::RelocateTrackAndArrow(Void)
{
    SFXRectangleConst                           rc(GetLocalBound());
    SInt16                                      side;
    SInt16                                      length;

    if (_scrollbar.orient == VERTICAL) {
        side = rc.GetWidth();
        length = (side + side < rc.GetHeight()) ? side : rc.GetHeight() / 2;
        _decrementArrow.Set(rc).SetHeight(length);
        _track.Set(rc).AddY(length).SubHeight(length + length);
        _incrementArrow.Set(_decrementArrow).AddY(_track.GetHeight() + length);
    }
    else {
        side = rc.GetHeight();
        length = (side + side < rc.GetWidth()) ? side : rc.GetWidth() / 2;
        _decrementArrow.Set(rc).SetWidth(length);
        _track.Set(rc).AddX(length).SubWidth(length + length);
        _incrementArrow.Set(_decrementArrow).AddX(_track.GetWidth() + length);
    }
    return;
}// SFYScrollBarControl::RelocateTrackAndArrow //

参照

SFYScrollBarControl::SetOrientation | SFYScrollBarControl::HandleBoundVirtual | ローカル領域


SFYScrollBarControl::SetArrowColor
矢印ラベルの色を設定します。
[ public ]
Void SetArrowColor(
    SFXRGBColorConstRef param   // 設定する値
);

解説

この関数は、矢印ラベル(三角形)の色を設定します。

デフォルト値: SFXRGBColor(0x00, 0x00, 0x00, 0x00)[黒色]

このスクロールバーコントロールは、 矢印ラベル(三角形)の色が変更されると、 スタイルイベント [SFXEvent(SFEVT_RESPONDER_STYLE, SFP16_STYLE_COLOR, 0)] を受信します。

参照

SFYScrollBarControl::GetArrowColor | SFXRGBColor


SFYScrollBarControl::SetBevelColor
スクロールバーの外枠を描画するためのベベルカラーを設定します。
[ public ]
Void SetBevelColor(
    SFXBevelColorConstRef param   // 設定する値
);

解説

この関数は、 スクロールバーの外枠を描画するためのベベルカラー(SFXBevelColor)を設定します。

デフォルト値: SFXBevelColor(SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00), SFXRGBColor(0xCC, 0xCC, 0xCC, 0x00), SFXRGBColor(0x88, 0x88, 0x88, 0x00))

このスクロールバーコントロールは、 スクロールバーの外枠を描画するためのベベルカラーが変更されると、 スタイルイベント [SFXEvent(SFEVT_RESPONDER_STYLE, SFP16_STYLE_COLOR, 0)] を受信します。

参照

SFYScrollBarControl::GetBevelColor | SFXBevelColor | SFXRGBColor


SFYScrollBarControl::SetDecrementArrowRectangle
減分矢印矩形領域を設定します。
[ protected ]
Void SetDecrementArrowRectangle(
    SFXRectangleConstRef param   // 設定する値
);

解説

この関数は、減分矢印矩形領域を設定します。

デフォルトの設定は、 SFYScrollBarControl::RelocateTrackAndArrow 関数で行われます。 詳細は、SFYScrollBarControl::RelocateTrackAndArrow 関数の内部実装コードを参照してください。

[Caution] 注意

この関数は、 スクロールバーのデフォルトレイアウトをカスタマイズしたい場合に限り利用します。

SFYScrollBarControl::RelocateTrackAndArrow 関数もスクロールバーのレイアウト変更に合わせてオーバーライドする必要があります。

内部実装

この関数の内部実装は以下の通りです。

/*protected */inline Void SFYScrollBarControl::SetDecrementArrowRectangle(SFXRectangleConstRef param)
{
    _decrementArrow.Set(param);
}// SFYScrollBarControl::SetDecrementArrowRectangle //

参照

SFYScrollBarControl::GetDecrementArrowRectangle | SFYScrollBarControl::RelocateTrackAndArrow | SFYResponder::Invalidate


SFYScrollBarControl::SetIncrementArrowRectangle
増分矢印矩形領域を設定します。
[ protected ]
Void SetIncrementArrowRectangle(
    SFXRectangleConstRef param   // 設定する値
);

解説

この関数は、増分矢印矩形領域を設定します。

デフォルトの設定は、 SFYScrollBarControl::RelocateTrackAndArrow 関数で行われます。 詳細は、SFYScrollBarControl::RelocateTrackAndArrow 関数の内部実装コードを参照してください。

[Caution] 注意

この関数は、 スクロールバーのデフォルトレイアウトをカスタマイズしたい場合に限り利用します。

SFYScrollBarControl::RelocateTrackAndArrow 関数もスクロールバーのレイアウト変更に合わせてオーバーライドする必要があります。

内部実装

この関数の内部実装は以下の通りです。

/*protected */inline Void SFYScrollBarControl::SetIncrementArrowRectangle(SFXRectangleConstRef param)
{
    _incrementArrow.Set(param);
}// SFYScrollBarControl::SetIncrementArrowRectangle //

参照

SFYScrollBarControl::GetIncrementArrowRectangle | SFYScrollBarControl::RelocateTrackAndArrow | SFYResponder::Invalidate


SFYScrollBarControl::SetOrientation
スクロールバーの方向(垂直か水平)を設定します。
[ public ]
Void SetOrientation(
    OrientationEnum param   // 設定する値
);

解説

この関数は、スクロールバーの方向を設定します。

水平(SFYScrollBarControl::HORIZONTAL)または垂直(SFYScrollBarControl::VERTICAL)を設定します。

デフォルト値: SFYScrollBarControl::VERTICAL

スクロールバーの方向が変更される場合は、 領域の再配置が行われます。

参照

SFYScrollBarControl::GetOrientation | SFYScrollBarControl::OrientationEnum


SFYScrollBarControl::SetPageValue
ページサイズを設定します。
[ public ]
Void SetPageValue(
    SInt32 param   // 設定する値
);

解説

この関数は、ページサイズを設定します。

このスクロールバーコントロールは、スクロール可能状態が変化した場合、 スクロールバーイベント [SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0)] を受信します。

[Note] 注意

param 引数には、1 以上の整数を指定します。

ページサイズはサムの長さに対応します。

『ページサイズ ≧ {(最大値) - (最小値)} 』の場合、 スクロール不可能であり、スクロールバーコントロールのサムは描画されません。 このとき、 サムの長さ(SFYScrollBarControl::GetThumbLength 関数の戻り値)は 0 になります。

『ページサイズ < {(最大値) - (最小値)} 』の場合、 スクロール可能であり、以下の長さのサムが描画されます。

サムの長さ = max(トラックの長さ * ページサイズ / {(最大値) - (最小値)}, 2) // max(a, b) は、a と b の大きい方を表します

なお、最大値 / 最小値は、 SFYControl::SetMaximumValue / SFYControl::SetMinimumValue 関数を使用して設定します。 通常、最小値はデフォルト値の 0 を使用します。 最大値は、スクロールバーに表示する対象がコンテナ系レスポンダの場合は、 レスポンダ領域終端のローカル座標系の X または Y 座標の値になります(スクロール方向が水平の場合は X 座標、垂直の場合は Y 座標)。

トラックの長さは、スクロールバーコントロール矩形領域の長さから減分矢印矩形領域と増分矢印矩形領域の長さを減算した値になります (スクロール方向が水平の場合は X 成分の長さ、垂直の場合は Y 成分の長さ)。

内部実装

この関数の内部実装は以下の通りです。

/*public */Void SFYScrollBarControl::SetPageValue(SInt32 param)
{
    if (_pagesize != param) {
        _pagesize = param;
        QueryScrollable();
        RelocateThumb();
        Invalidate();
    }
    return;
}// SFYScrollBarControl::SetPageValue //

/*private */Void SFYScrollBarControl::QueryScrollable(Void)
{
    SInt32Const                                 min(GetMinimumValue());
    SInt32Const                                 max(GetMaximumValue());

    if (((max > min) && (max - min > _pagesize)) ^ !(!_scrollable)) {
        _scrollable = !_scrollable;
        HandleScrollable();
    }
    return;
}// SFYScrollBarControl::QueryScrollable //

/*protected virtual */Void SFYScrollBarControl::HandleScrollable(Void)
{
    InvokeBackward(SFXEvent(SFEVT_RESPONDER_SCROLLBAR, SFP16_SCROLLBAR_ENABLE, 0), true);
    return;
}// SFYScrollBarControl::HandleScrollable //

/*private */Void SFYScrollBarControl::RelocateThumb(Void)
{
    if (IsScrollable()) {
        RelocateThumbLength();
        RelocateThumbTop();
    }
    else {
        _scrollbar.thumbLength = 0;
    }
    return;
}// SFYScrollBarControl::RelocateThumb //

/*private */Void SFYScrollBarControl::RelocateThumbLength(Void)
{
    SInt32Const                                 min(GetMinimumValue());
    SInt32Const                                 max(GetMaximumValue());
    SFXRectangleConst                           rc(GetLocalBound());
    SInt16                                      track;

    track = (_scrollbar.orient == VERTICAL) ? _track.GetHeight() : _track.GetWidth();
    track = (track > 0) ? track : 0;
    _scrollbar.thumbLength = static_cast<SInt16>(track * _pagesize / (max - min));
    if ((_scrollbar.thumbLength < MINIMUM_THUMB_LENGTH) && (MINIMUM_THUMB_LENGTH < track)) {
        _scrollbar.thumbLength = MINIMUM_THUMB_LENGTH;
    }
    _scrollbar.scrollRange = track - _scrollbar.thumbLength;
    return;
}// SFYScrollBarControl::RelocateThumbLength //

/*private */ Void SFYScrollBarControl::RelocateThumbTop(Void)
{
    SInt32Const                                 cur(GetCurrentValue());
    SInt32Const                                 min(GetMinimumValue());
    SInt32Const                                 max(GetMaximumValue());

    if (max - min > _pagesize) { // This is always true. //
        _scrollbar.thumbTop = static_cast<SInt16>(_scrollbar.scrollRange * (cur - min) / (max - min - _pagesize));
    }
    else {
        _scrollbar.thumbTop = 0;
    }
    return;
}// SFYScrollBarControl::RelocateThumbTop //

参照

SFYScrollBarControl::GetPageValue | SFYScrollBarControl::GetThumbLength | SFYScrollBarControl::GetTrackRectangle | スクロールバーイベント [SFEVT_RESPONDER_SCROLLBAR]


SFYScrollBarControl::SetScrollStepValue
スクロールステップを設定します。
[ public ]
Void SetScrollStepValue(
    SInt32 param   // 設定する値
);

解説

この関数は、スクロールステップ (SFYScrollBarControl::Increment / SFYScrollBarControl::Decrement 関数で現在値を増減する単位)を設定します。

[Note] 注意

スクロールバーコントロールを装着するレスポンダ(ターゲットレスポンダ) 側でスクロールバーコントロールの現在値を増減する場合、 この関数は使用しません。

この関数は、 スクロールバーコントロール側からターゲットレスポンダをスクロールしたい場合に使用します。

通常、ターゲットレスポンダ側でスクロールさせますので、 この関数を使用する機会は少ないと考えられます。

内部実装

この関数の内部実装は以下の通りです。

/*public */Void SFYScrollBarControl::SetScrollStepValue(SInt32 param)
{
    if (_scrollstep != param) {
        _scrollstep = param;
    }
    return;
}// SFYScrollBarControl::SetScrollStepValue //

参照

SFYScrollBarControl::GetScrollStepValue | SFYScrollBarControl::Decrement | SFYScrollBarControl::Increment


SFYScrollBarControl::SetTrackColor
トラックの色を設定します。
[ public ]
Void SetTrackColor(
    SFXRGBColorConstRef param   // 設定する値
);

解説

この関数は、トラック矩形を塗り潰す色を設定します。

デフォルト値: SFXRGBColor(0xF0, 0xF0, 0xF0, 0x00)[薄灰色]

このスクロールバーコントロールは、 トラック矩形を塗り潰す色が変更されると、 スタイルイベント [SFXEvent(SFEVT_RESPONDER_STYLE, SFP16_STYLE_COLOR, 0)] を受信します。

参照

SFYScrollBarControl::GetTrackColor | SFXRGBColor


SFYScrollBarControl::SetTrackRectangle
トラック領域を設定します。
[ protected ]
Void SetTrackRectangle(
    SFXRectangleConstRef param   // 設定する値
);

解説

この関数は、トラック領域を設定します。

デフォルトの設定は、 SFYScrollBarControl::RelocateTrackAndArrow 関数で行われます。 詳細は、SFYScrollBarControl::RelocateTrackAndArrow 関数の内部実装コードを参照してください。

[Caution] 注意

この関数は、 スクロールバーのデフォルトレイアウトをカスタマイズしたい場合に限り利用します。

SFYScrollBarControl::RelocateTrackAndArrow 関数もスクロールバーのレイアウト変更に合わせてオーバーライドする必要があります。

内部実装

この関数の内部実装は以下の通りです。

/*protected */inline Void SFYScrollBarControl::SetTrackRectangle(SFXRectangleConstRef param)
{
    _track.Set(param);
    return;
}// SFYScrollBarControl::SetTrackRectangle //

参照

SFYScrollBarControl::GetTrackRectangle | SFYScrollBarControl::RelocateTrackAndArrow | SFYResponder::Invalidate


SFYScrollBarControl::CodeEnum
SFYScrollBarControl クラスを表す定数です。
enum CodeEnum {
    CODE_TYPE = four_char_code('.', 's', 'c', 'r')
};
SFMTYPEDEFTYPE(CodeEnum)

参照

SFYResponder::GetType | SFYResponder::SetType


SFYScrollBarControl::OrientationEnum
スクロールバーの方向を表す定数です。
enum OrientationEnum {
    HORIZONTAL          = 0,        // 水平方向
    VERTICAL,                       // 垂直方向
    DEFAULT_ORIENTATION = VERTICAL  // デフォルト
};
SFMTYPEDEFTYPE(OrientationEnum)