RPGプログラマーがGUI化やWeb化で最も興味を持つのが
コンボボックスとスクロール・バーです。
コンボボックスの例は先に紹介しました。
例では簡単なコンボボックスでしたが実際はもっと
複雑な条件のあるコンボボックスを作成することができます。
さて次にRPGプログラマーが興味を示すのがスクロール・バーです。
動的にスライドさせるスクロール・バーの実装は
これまで文字ベース(=CUI:Charactor User Interface)であった
RPGプログラマーにとっては憧れのようです。
実は5250エミュレータもスクロール・バーの機能は持っています。
DDSでスクロール・バーを実現するのはとても簡単です。
0046.00 A R SFCTL01 SFLCTL(SFREC01) 0047.00 A TEXT(' SFL制御見出 ') : 0055.00 A 41 SFLDSPCTL 0056.00 A 42 SFLDSP 0057.00 A 43 SFLINZ 0058.00 A SFLRNA 0059.00 A 44 SFLCLR 0060.00 A 45 SFLEND(*SCRBAR)
のようにして SFLEND(*SCRBAR)を定義するとスクロール・バーが表示されます。
SFLEND(*MORE) であれば「続く..」や「終わり」が表示されますが
SFLEND(*SCRBAR) であればスクロール・バーが表示されます。
標識 45 はSFLレコードの終わりであるときにONになる標識です。
次は5250エミュレータでスクロール・バーを表示している画面です。
これをAutoWebで表示すると次のようにスクロール・バーとして表示されます。
[DSPFサンプル: SCROLLFM ]
ソースはこちらで
0001.00 A* 91/10/14 21:54:59 QUATTRO REL-R03M00 5728-PW1 0002.00 A*-----------------------------------------------* 0003.00 A* サブファイル表示 SFLDSPFM * 0004.00 A* 0005.00 A* 商品マスター照会 0006.00 A* 0007.00 A*-----------------------------------------------* 0008.00 A* 11:25:43 QUATTRO REL-R06M00 5714-UT1 0009.00 A DSPSIZ(24 80 *DS3) 0010.00 A MSGLOC(24) 0011.00 A PRINT 0012.00 A*-----------------------------------------------* 0013.00 A R DSPHEAD 0014.00 A*-----------------------------------------------* 0015.00 A TEXT(' 初期画面 ') 0016.00 A*%%TS SD 19930612 135725 QUATTRO REL-V3R2M0 5738-PW1 0017.00 A CF03(03 ' 終了 ') 0018.00 A SETOF(99) 0019.00 A BLINK 0020.00 A CSRLOC(LIN POS) 0021.00 A 1 27' 商品マスター照会 ' 0022.00 A DSPATR(RI) 0023.00 A COLOR(PNK) 0024.00 A 2 2' 商品コード ' 0025.00 A SHCODE 10A B 2 15TEXT(' 商品コード ') 0026.00 A 11 15' 必要な項目を打鍵して実行キーを押 + 0027.00 A して下さい。 ' 0028.00 A DSPATR(HI) 0029.00 A 23 2'F3= 終了 ' 0030.00 A COLOR(BLU) 0031.00 A LIN 3S 0H 0032.00 A POS 3S 0H 0033.00 A R SFREC01 SFL 0034.00 A TEXT(' SFL明細行 ') 0035.00 A*%%TS SD 19930612 144015 QUATTRO REL-V3R2M0 5738-PW1 0036.00 A*------------------------------------------------* 0037.00 A 20 0038.00 AO 99 SFLNXTCHG 0039.00 A GYO 4A O 8 2TEXT(' № ') 0040.00 A 03 DSPATR(UL) 0041.00 A SHCODE 10A O 8 7TEXT(' 商品コード ') 0042.00 A SHNAME 24O O 8 20TEXT(' 商品名 ') 0043.00 A SHTANK 7Y 0O 8 45TEXT(' 単価 ') 0044.00 A EDTCDE(K) 0045.00 A SHSCOD 4A O 8 60TEXT(' 品種コード ') 0046.00 A R SFCTL01 SFLCTL(SFREC01) 0047.00 A TEXT(' SFL制御見出 ') 0048.00 A*%%TS SD 19930612 144015 QUATTRO REL-V2R1M0 5738-PW1 0049.00 A*------------------------------------------------* 0050.00 A OVERLAY 0051.00 A* SFLPAG :1 画面での表示行数 0052.00 A* SFLSIZ :サブファイル 全体の大きさ 0053.00 A SFLSIZ(14) 0054.00 A SFLPAG(13) 0055.00 A 41 SFLDSPCTL 0056.00 A 42 SFLDSP 0057.00 A 43 SFLINZ 0058.00 A SFLRNA 0059.00 A 44 SFLCLR 0060.00 A 45 SFLEND(*SCRBAR) 0061.00 A 46 SFLDLT 0062.00 A ROLLUP(14 ' 次頁 ') 0063.00 A ROLLDOWN(15 ' 前頁 ') 0064.00 A CF03(03 ' 終了 ') 0065.00 A CF12(12 ' 前画面 ') 0066.00 A SETOF(99) 0067.00 A* MOUBTN(*ULP ROLLUP) 0068.00 A* MOUBTN(*URP ROLLDOWN) 0069.00 A BLINK 0070.00 A*( SFLEND(*MORE)... 続く / 終りの使用のために SFLMSG は 0071.00 A* 使用しません。 ) 0072.00 A DMYFLD 1A O 1 72 0073.00 A* 61 : IMPOSSIBLE TO ROLLUP 0074.00 A 61 ERRMSGID(EDT0411 QPDA/QEDTMSG 61) 0075.00 A* 62 : IMPOSSIBLE TO ROLLDOWN 0076.00 A 62 ERRMSGID(EDT0410 QPDA/QEDTMSG 62) 0077.00 A DSPREC 4S 0H SFLRCDNBR(CURSOR) 0078.00 A TEXT('SFL 表示 レコード № ') 0079.00 A LIN 3S 0H TEXT('カーソル 位置合せ - 行 ') 0080.00 A POS 3S 0H TEXT('カーソル 位置合せ - 桁 ') 0081.00 A 1 27' 商品マスター照会 ' 0082.00 A DSPATR(RI) 0083.00 A COLOR(PNK) 0084.00 A*( 明細行の桁見出し ) 0085.00 A 7 2' № ' 0086.00 A DSPATR(HI) 0087.00 A* エラー 標識 :61 - 69 0088.00 A 7 7' 商品コード ' 0089.00 A DSPATR(HI) 0090.00 A 7 20' 商品名 ' 0091.00 A DSPATR(HI) 0092.00 A 7 45' 単価 ' 0093.00 A DSPATR(HI) 0094.00 A 7 56' 品種コード ' 0095.00 A DSPATR(HI) 0096.00 A*( 見出しの項目 ) 0097.00 A 2 2' 商品コード ' 0098.00 A STRCOD 10A O 3 2TEXT(' 商品コード ') 0099.00 A R NOREC 0100.00 A TEXT(' MSG : レコードなし ') 0101.00 A*%%TS SD 19930612 144015 QUATTRO REL-V2R1M0 5738-PW1 0102.00 A OVERLAY 0103.00 A CF03(03 ' 終了 ') 0104.00 A 10 5'( 検索されて見つかったレコードが - 0105.00 A ない。 )' 0106.00 A DSPATR(HI) 0107.00 A 16 5' 処理を続けるために実行キーを押し - 0108.00 A なさい。 ' 0109.00 A DSPATR(HI) 0110.00 A R DSPEND01 0111.00 A TEXT(' 機能キーの表示 ') 0112.00 A*%%TS SD 19930612 144015 QUATTRO REL-V2R1M0 5738-PW1 0113.00 A*----------------------------------------------------* 0114.00 A OVERLAY 0115.00 A CF03(03 ' 終了 ') 0116.00 A 23 2'F3= 終了 ' 0117.00 A COLOR(BLU) 0118.00 A 23 41'F12= 前画面 ' 0119.00 A COLOR(BLU)
[ RPGサンプル: SCROLL ]
ソースはこちらで
0001.00 H DFTNAME(PGMID) DATEDIT(*YMD/) 0002.00 F********** 商品マスター照会 ************************************ 0003.00 FSCROLLFM CF E WORKSTN 0004.00 F SFILE(SFREC01:RRN1) 0005.00 F INFDS(INFDS) 0006.00 FSHOHIN IF E K DISK 0007.00 F***************************************************************** 0008.00 D* 0009.00 D* -( サブ・ファイルのファイル情報 )- 0010.00 D* 0011.00 D INFDS DS 0012.00 D*( カーソルの行と桁の取り込み ) 0013.00 D LINE 370 371B 0 0014.00 D* TOPRRN: 今表示しているサブ・ファイルの先頭の RRN 0015.00 D TOPRRN 378 379B 0 0016.00 D* BRRN : サブ・ファイルのレコード№ 0017.00 D BRRN 376 377B 0 0018.00 D SFREC DS 0019.00 D GYO 4A 0020.00 D SHCODE 10A 0021.00 D SHNAME 24A 0022.00 D SHTANK 7S 0 0023.00 D SHSCOD 4A 0024.00 C GOTO DETAIL 0025.00 C*( 初期画面 ) 0026.00 C*----------------------------------------------------+ 0027.00 C START TAG | 0028.00 C EXFMT DSPHEAD | 0029.00 C*----------------------------------------------------+ 0030.00 C SETOFF 99 0031.00 C*( CF03 )- 終了 0032.00 C *IN03 IFEQ *ON CF03 0033.00 C SETON LR 0034.00 C LR RETURN 0035.00 C END CF03 0036.00 C*( 実行キー ) 0037.00 C DETAIL TAG 0038.00 C*----------------------------------------------------+ 0039.00 C SETKEY KLIST | 0040.00 C KFLD STRCOD | 0041.00 C*----------------------------------------------------+ 0042.00 C MOVE SHCODE STRCOD 0043.00 C SETKEY SETLL SHOHIN 0044.00 C EXSR SFLCLR 0045.00 C* : ファイルの読み取り 0046.00 C Z-ADD 1 TOPRRN 0047.00 C EXSR READ 0048.00 C* U8:AutoWeb のスクロール・バーでは EOF になるまで 0049.00 C* 読取りを繰り返す。 0050.00 C *IN88 IFEQ *ON 0051.00 C DOW *IN45 = *OFF 0052.00 C SETON 4142 |SFL-DSPLY 0053.00 C WRITE SFCTL01 | 0054.00 C SETOFF 4142 | 0055.00 C EXSR ROLLUP 0056.00 C ENDDO 0057.00 C ENDIF 0058.00 C*( サブ・ファイルの表示 ) 0059.00 C WRITE DSPEND01 0060.00 C*----------------------------------------------------+ 0061.00 C DSPLY TAG | 0062.00 C SETON 4142 |SFL-DSPLY 0063.00 C 89 READ SFCTL01 | 0064.00 C N89 EXFMT SFCTL01 | 0065.00 C SETOFF 4142 | 0066.00 C*----------------------------------------------------+ 0067.00 C SETOFF 99 0068.00 C*( CF03 )- 終了 0069.00 C *IN03 IFEQ *ON CF03 0070.00 C SETON LR 0071.00 C LR RETURN 0072.00 C END CF03 0073.00 C*( CF12 )- 前画面 0074.00 C *IN12 IFEQ *ON CF12 0075.00 C SETOFF 12 0076.00 C MOVE STRCOD SHCODE 0077.00 C GOTO START 0078.00 C END CF12 0079.00 C*( ROLL UP )- 次ページ 0080.00 C *IN14 IFEQ *ON 0081.00 C EXSR ROLLUP 0082.00 C GOTO DSPLY 0083.00 C END 0084.00 C*( ROLL DOWN )- 前ページ 0085.00 C *IN15 IFEQ *ON 0086.00 C Z-ADD 1 DSPREC 0087.00 C SETON 6299 ERRMSG 0088.00 C GOTO DSPLY 0089.00 C END 0090.00 C*( 実行キー ) 0091.00 C 2 CHAIN SFREC01 90 0092.00 C GOTO DSPLY 0093.00 C* 0094.00 C END TAG 0095.00 C****************************************************** 0096.00 C *INZSR BEGSR 0097.00 C****************************************************** 0098.00 C* 初期サイクルのみの実行 0099.00 C U8 SETON 88 0100.00 C SETON 88 0101.00 C CLEAR SFREC01 0102.00 C*( SFL 行数を 13 行にセット ) 13 0103.00 C MOVE 13 GYOSU 2 0 行数 0104.00 C MOVE 08 STRGYO 2 0 開始行№ 0105.00 C ENDSR 0106.00 C****************************************************** 0107.00 C READ BEGSR 0108.00 C****************************************************** 0109.00 C MOVE *BLANKS EOF 1 0110.00 C MOVE *ZEROS DSPREC 0111.00 C SETOFF 45 0112.00 C*( データ・ベースの検索 ) 0113.00 C TOPRRN ADD GYOSU ENDRRN 4 0 0114.00 C SUB 1 ENDRRN 0115.00 C* 0116.00 C TOPRRN DO ENDRRN RRN1 4 0 READ 0117.00 C SETOFF 50 0118.00 C READ SHOHIN 50 0119.00 C*( 終り ) 0120.00 C *IN50 IFEQ *ON EOF 0121.00 C MOVE 'E' EOF 0122.00 C SETOFF 1129 0123.00 C SETON 45 0124.00 C GOTO REDEND 0125.00 C ELSE EOF 0126.00 C*( 行 NO に入れる ) 0127.00 C MOVE RRN1 GYO 0128.00 C DSPREC IFEQ *ZEROS 0129.00 C Z-ADD TOPRRN DSPREC 0130.00 C ENDIF 0131.00 C*( サブ・ファイルへ更新 ) 0132.00 C*----------------------------------------------------+ 0133.00 C WRITE SFREC01 | 0134.00 C*----------------------------------------------------+ 0135.00 C Z-ADD RRN1 LSTRRN 4 0 0136.00 C ENDIF EOF 0137.00 C ENDDO READ 0138.00 C REDEND TAG 0139.00 C DSPREC IFEQ *ZEROS 0140.00 C SETON 89 0141.00 C TOPRRN SUB 1 DSPREC 0142.00 C ENDIF 0143.00 C ENDSR 0144.00 C****************************************************** 0145.00 C SFLCLR BEGSR 0146.00 C****************************************************** 0147.00 C*( サブ・ファイルのクリヤー ) 0148.00 C*----------------------------------------------------+ 0149.00 C SETON 44 | 0150.00 C WRITE SFCTL01 | 0151.00 C SETOFF 4489 | 0152.00 C*----------------------------------------------------+ 0153.00 C ENDSR 0154.00 C****************************************************** 0155.00 C ROLLUP BEGSR 0156.00 C****************************************************** 0157.00 C EOF IFEQ 'E' 0158.00 C SETON 6199 ERRMSG 0159.00 C 99 Z-ADD LSTRRN DSPREC 0160.00 C 99 GOTO UPEND 0161.00 C END 0162.00 C ENDRRN ADD 1 TOPRRN 0163.00 C EXSR READ 0164.00 C UPEND ENDSR
いかがでしたか? スクロール・バーの実装はとても簡単でした。
次回は非常に効果のあるタブ・コントロールについて説明しましょう。
簡単なタブ・コントロールだけで適用業務が驚くほど簡単になる例を
紹介します。