Top > Tips > ページング
  トップページへ   [ 一覧 | 検索 | 最終更新 ]   [ 差分 | バックアップ | 凍結 ]
  • AYAで、用語リストなどをページングするための簡単な関数を書いてみました。
  • 大雑把な実装ですがよければどうぞ。
  • YAYAで動作確認していますが高度な関数は使って無いのでAYAでも動くと思います。
  • 添付ファイルから持っていってください。ライセンスは何してもOKです。
pager.png
fileaya_pager.dic
///////// 文 ページャ 汎用関数
///////// written by ukiya.
///////// 2007/08/04 version 1.0	新規作成

//*****************************************************************************
//	OnShowPage
//	ページャ用独自イベント
//	ref.0	表示するリストの先頭のインデックス
//	PAGER. で始まる変数に設定を入れて呼ぶ
//	ページングされると再度OnShowPageを呼ぶ
//*****************************************************************************
OnShowPage{
    _list =PAGER.List
    _start=TOINT(reference0)
    _end  =_start+PAGER.ShowNum
    _max  =ARRAYSIZE(_list)

    //リスト作成
    _showlist=''
    for _i=_start ; _i<_end ; _i++ {
        if  _i > _max - 1 {
            break
        }
        _key=_list[_i][0,PAGER.Separator]
        _val=_list[_i][1,PAGER.Separator]
        _showlist+="%(PAGER.Marker)\q[%(_key),%(_val)]\n"
        //SSP2.00.15以降なら以下のようにすればマーカーも押せる
        //_showlist+="\__q[%(_val)]%(PAGER.Marker)%(_key)\__q\n"
    }

    //nowpageは0はじまり
    //maxpageはページ個数でなくインデックス
    _nowpage  =TOINT(_start / PAGER.ShowNum)
    _startpage=_nowpage-TOINT(PAGER.PageNum/2)
    _maxpage  =CEIL(_max/PAGER.ShowNum) - 1    //インデックスなので-1

    _prevstr=''
    _nextstr=''
    
    //さらに前のページはあるか?
    if _startpage < 0 {
        _startpage=0
        _prevstr='< '
    }else{
        _prevpage=_nowpage-PAGER.PageNum
        if _prevpage < 0 {
            _prevpage=0
        }
        _prevstart=_prevpage * PAGER.ShowNum
        _prevstr="\f[bold,true]\q[<,OnShowPage,%(_prevstart)]\f[bold,false] "
    }
    

    //さらに後のページはあるか?
    _endpage=_startpage+PAGER.PageNum-1    //インデックスなので-1
    if _endpage >= _maxpage {
        _endpage=_maxpage
        _nextstr='> '
    }else{
        _nextpage=_nowpage+PAGER.PageNum
        if _nextpage >= _maxpage {
            _nextpage=_maxpage
        }
        _nextstart=_nextpage * PAGER.ShowNum
        _nextstr="\f[bold,true]\q[>,OnShowPage,%(_nextstart)]\f[bold,false] "
    }
    
    
    //ページリスト作成
    _pagelist=''
    for _i=_startpage ; _i<=_endpage ; _i++ {
        //インデックスなので <=
        _pagestr=''
        if _i < 10 {
            _pagestr='0'+TOSTR(_i+1)    //0はじまり->1はじまり
        }else{
            _pagestr=TOSTR(_i+1)    //0はじまり->1はじまり
        }
        
        if _i == _nowpage {
            _pagelist+=_pagestr+' '
        }else{
            _pagestart=_i*PAGER.ShowNum
            _pagelist+="\f[bold,true]\q[%(_pagestr),OnShowPage,%(_pagestart)]\f[bold,false] "
        }
    }
    
    //最終出力
    "%(PAGER.ShowHeader)%(_showlist)%(PAGER.PageHeader)%(_prevstr)%(_pagelist)%(_nextstr)%(PAGER.Footer)"
}


//**** デバッグ用 *************************************************************

OnKeyPress{
    CVSTR(reference0)
    case reference0 {
    when 'd' {
        PAGER.List=( /
        "リスト01|list1", /
        "リスト02|list2", /
        "リスト03|list3", /
        "リスト04|list4", /
        "リスト05|list5", /
        "リスト06|list6", /
        "リスト07|list7", /
        "リスト08|list8", /
        "リスト09|list9", /
        "リスト10|lista", /
        "リスト11|listb", /
        "リスト12|listc", /
        "リスト13|listd", /
        "リスト14|liste", /
        "リスト15|listf", /
        "リスト16|listg", /
        "リスト17|listh", /
        "リスト18|listi", /
        "リスト19|listj", /
        "リスト20|listk", /
        )
        //PAGER.Listに表示したいリストを入れる。
        PAGER.ShowHeader='\_q■タイトル■\n'        //リストヘッダ
        PAGER.PageHeader='■ページ■\n'        //ページヘッダ
        PAGER.Footer='\n\![*]\q[CLOSE,close]\_q'    //フッタ
        PAGER.Marker='\![*]'                    //項目マーカ
        PAGER.Separator='|'                        //項目名と選択肢名の区切り
        PAGER.ShowNum=5                            //リスト表示数
        PAGER.PageNum=3                            //ページ表示数(奇数で)
        reference0=0                            //初期表示時のおまじない
        OnShowPage                                //初期表示コール
    }
    }
}

添付ファイル: fileaya_pager.dic 1142件 [詳細] filepager.png 450件 [詳細]