* U K I Y A H O N P O *
Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura,
che la diritta via era smarrita.
    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
浮子屋商店もよろしく。

その他雑文/AYA用簡易ページャ のバックアップ(No.3)


AYAで、用語リストなどをページングするための簡単な関数を書いてみました。 大雑把な実装ですがよければどうぞ。

pager.png
fileaya_pager.dic
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
-
-
|
!
|
|
|
|
|
!
|
|
|
|
|
|
|
|
|
|
|
-
|
|
-
|
-
|
!
|
|
!
|
|
|
|
-
|
|
-
|
-
|
!
|
|
!
|
|
|
|
-
|
|
-
|
-
|
!
|
-
|
-
|
|
!
!
|
|
|
!
 
 
 
 
-
|
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
!
!
 
///////// 文 ページャ 汎用関数
///////// 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                                //初期表示コール
    }
    }
}