RPG

348. スクロール・バー

5250エミュレータのこれまでのROLL UP/DOWN に比べてスクロール・バーが
優れているのはエンド・ユーザーがスクロール行数を自由に調整むできるからである。
Web化製品を説明していると必ずと言ってよいほど

「スクロール・バーはどのように表示するのか?」

という質問が出るのだがWeb化をしなくても5250エミュレータ画面でも
スクロール・バーは表示することができる。

[スクロール・バー:DSPF]

ソースはこちらから

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)  


                       

[解説]

スクロール・バーの実装は簡単でSFLENDパラメータは通常であれば

0060.00      A  45                                  SFLEND(*MORE)

と記述するところを

0060.00      A  45                                  SFLEND(*SCRBAR)

に変更すればよいだけである。
ただしスクロール・バーを表示するにはROLLUPしてから次のSFLレコードを
追加するのではなく始めからすべてのSFLレコードを追加しておくことが
望ましい。
そのことを考慮して次のRPGソースをご覧頂きたい。

[スクロール・バー:RPG]

ソースはこちらから

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                                       
0033.00 C                   SETON                                        LR     
0034.00 C   LR              RETURN                                              
0035.00 C                   END                                                 
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   
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   
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                                       
0070.00 C                   SETON                                        LR     
0071.00 C   LR              RETURN                                              
0072.00 C                   END                                              
0073.00 C*( CF12 )- 前画面                                                   
0074.00 C     *IN12         IFEQ      *ON                                    
0075.00 C                   SETOFF                                       12  
0076.00 C                   MOVE      STRCOD        SHCODE                   
0077.00 C                   GOTO      START                                  
0078.00 C                   END                                              
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
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         
0117.00 C                   SETOFF                                       50       
0118.00 C                   READ      SHOHIN                                 50   
0119.00 C*( 終り )                                                                
0120.00 C     *IN50         IFEQ      *ON                                     
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                                              
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                                             
0137.00 C                   ENDDO                                             
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  
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  


                                            

[解説]

0100.00 C                   SETON                                        88

で標識88をオンにしておいて
標識88がオンのときは EOFになるまで

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   
0053.00 C                   WRITE     SFCTL01                                   
0054.00 C                   SETOFF                                       4142   
0055.00 C                   EXSR      ROLLUP                                    
0056.00 C                   ENDDO                                               
0057.00 C                   ENDIF 

 

のようにして読取りを繰り返している。

5250エミュレータでもこのようにスクロール・バーを表示することは可能であるが
決してなめらかなスクロール・バーではない。