RPG

352. メニュー・バー

IBM i でもメニュー・バーを定義することができる。
Windowsではメニュー・バーの利用は一時期はほとんど見なくなったが
最近少し見かけるようになった。

メニュー・バーを選択すると次のようにプル・ダウンが表示される。

[メニュー・バーDSPFサンプル・ソース]

ソースはこちらから

0001.00      A                                      DSPSIZ(24 80 *DS3)                
0002.00      A                                      MSGLOC(24)                        
0003.00      A                                      PRINT                             
0004.00      A          R DSPHEAD                                                     
0005.00      A                                      TEXT(' 初期画面 ')                
0006.00      A*            11:59:33    QSECOFR     REL-R06M00  5714-UT1               
0007.00      A                                      CF03(03 ' 終了 ')                 
0008.00      A                                      ROLLUP(07)                        
0009.00      A                                      ROLLDOWN(08)                      
0010.00      A                                      BLINK                             
0011.00      A                                      INZRCD                            
0012.00      A                                  1 27' 仕入先マスターの照会 '          
0013.00      A                                      DSPATR(RI)                        
0014.00      A*                                 1 72' 日付 '                          
0015.00      A*           DATE           8Y 0O  1 80                                  
0016.00      A                                  2  2' 仕入先コード '                  
0017.00      A            SRCODE         4A  B    +1TEXT(' 仕入先コード ')            
0018.00      A  91                                  ERRMSG('ロールアップ できない ' 91)    
0019.00      A  92                                  ERRMSG('ロールダウン できない ' 92)    
0020.00      A*                                  + 1'-'                               
0021.00      A                                 11 13' 参照するコードを +              
0022.00      A                                       入れて実行キーを押してください ' 
0023.00      A                                      DSPATR(HI)                        
0024.00      A                                 22  2'ROLL UP/DOWN'                     
0025.00      A                                 23  2'F3= 終了 '                        
0026.00      A          R INZMSG                                                       
0027.00      A                                      OVERLAY PUTRETAIN                  
0028.00      A                                 23  2'F3= 終了 '                        
0029.00      A          R MNUBAR                    MNUBAR                             
0030.00      A                                      MNUBARDSP                          
0031.00      A                                      MNUBARSW(CA09)                     
0032.00      A                                      CF03(03 ' 終了 ')                  
0033.00      A*                                     OVERLAY PUTRETAIN                  
0034.00      A*%%TS  SD  19940302  221529  QTR         REL-V2R2M0  5738-PW1            
0035.00      A            MNUFLD         2Y 0B  1  2                                   
0036.00      A                                      MNUBARCHC(1 DSPDTA01 ' 基本情報 ') 
0037.00      A                                      MNUBARCHC(2 DSPDTA02 ' 分類情報 ') 
0038.00      A                                      MNUBARCHC(3 DSPDTA03 ' 支払情報 ') 
0039.00      A                                      MNUBARCHC(4 DSPDTA04 ' 督促条件 ') 
0040.00      A                                      MNUBARCHC(5 DSPDTA05 ' 追加情報 ') 
0041.00      A                                      MNUBARCHC(6 DSPDTA06 ' 更新情報 ') 
0042.00      A*                                23  2'F3= 終了 '                        
0043.00      A          R DSPDTA01                                                     
0044.00      A                                      PULLDOWN                           
0045.00      A                                      TEXT(' 基本情報 01')               
0046.00      A                                      CF03(03 ' 終了 ')                  
0047.00      A                                      CF10(10 ' 更新 ')                  
0048.00      A                                      CF23(23 ' 削除 ')                    
0049.00      A                                      CF12(12 ' 前画面 ')                  
0050.00      A                                      ROLLUP(07)                           
0051.00      A                                      ROLLDOWN(08)                         
0052.00      A                                      SETOF(99)                            
0053.00      A                                      BLINK                                
0054.00      A                                  1 27' 仕入先マスターの照会 '             
0055.00      A                                      DSPATR(RI)                           
0056.00      A                                  3  2' 仕入先コード '                     
0057.00      A            SRCODE         4A  O  3 18TEXT(' 仕入先コード ')               
0058.00      A  91                                  ERRMSG('ロールアップ できない ' 91)       
0059.00      A  92                                  ERRMSG('ロールダウン できない ' 92)       
0060.00      A                                  4  2' 基本情報 '                         
0061.00      A                                      DSPATR(RI)                           
0062.00      A                                  5 10' 仕入先名 '                         
0063.00      A            SRNMJ         32A  B  5 25TEXT(' 仕入先名 ')                   
0064.00      A                                  6 10' 略名 '                             
0065.00      A            SRNMK     R        B  6 25REFFLD(@SIREMT/SRNMK QTRFIL/SIREMT)  
0066.00      A                                  7 10' 電話番号 '                         
0067.00      A            SRTEL     R        B  7 25REFFLD(@SIREMT/SRTEL QTRFIL/SIREMT)  
0068.00      A                                  8 10' FAX 番号 '                         
0069.00      A            SRFAX     R        B  8 25REFFLD(@SIREMT/SRFAX QTRFIL/SIREMT)  
0070.00      A                                  9 10' 〒 '                               
0071.00      A            SRZIP     R        B  9 25REFFLD(@SIREMT/SRZIP QTRFIL/SIREMT)  
0072.00      A                                      TEXT('*ZIPCODE')                       
0073.00      A                                 10 10' 住所1 '                             
0074.00      A            SRADR1    R        B 10 25REFFLD(@SIREMT/SRADR1 QTRFIL/SIREMT)   
0075.00      A                                      TEXT('*ADDR1')                         
0076.00      A                                 11 10' 住所2 '                             
0077.00      A            SRADR2    R        B 11 25REFFLD(@SIREMT/SRADR2 QTRFIL/SIREMT)   
0078.00      A                                      TEXT('*ADDR2')                         
0079.00      A                                 12 10' 担当者名 '                           
0080.00      A            STANTO    R        B 12 25REFFLD(@SIREMT/STANTO QTRFIL/SIREMT)   
0081.00      A*                                23  2'F3= 終了 '                            
0082.00      A*                                23 35'F10= 更新 '                           
0083.00      A*                                23 53'F23= 削除 '                           
0084.00      A*                                23 69'F12= 前画面 '                         
0085.00      A          R DSPDTA02                                                         
0086.00      A                                      PULLDOWN                               
0087.00      A                                      TEXT(' 分類情報 02')                   
0088.00      A                                      CF03(03 ' 終了 ')                      
0089.00      A                                      CF10(10 ' 更新 ')                      
0090.00      A                                      CF23(23 ' 削除 ')                      
0091.00      A                                      CF12(12 ' 前画面 ')                    
0092.00      A                                      ROLLUP(07)                             
0093.00      A                                      ROLLDOWN(08)                           
0094.00      A                                      SETOF(99)                              
0095.00      A                                      BLINK                                  
0096.00      A                                  1 27' 仕入先マスターの照会 '             
0097.00      A                                      DSPATR(RI)                           
0098.00      A                                  3  2' 仕入先コード '                     
0099.00      A            SRCODE         4A  O  3 15TEXT(' 仕入先コード ')               
0100.00      A  91                                  ERRMSG('ロールアップ できない ' 91)       
0101.00      A  92                                  ERRMSG('ロールダウン できない ' 92)       
0102.00      A                                  4  2' 分類情報 '                         
0103.00      A                                      DSPATR(RI)                           
0104.00      A                                  5 10' 仕入先名 '                         
0105.00      A            SRNMJ         32A  B  5 25TEXT(' 仕入先名 ')                   
0106.00      A                                 13 10' 仕入先区分 '                       
0107.00      A            SRKB@          2Y 0B 13 25                                     
0108.00      A                                      SNGCHCFLD((*NUMCOL 2))               
0109.00      A                                      CHOICE(1 ' 仕入先 ')                 
0110.00      A                                      CHOICE(2 ' 外注先 ')                 
0111.00      A                                 14 10' 業種区分 '                         
0112.00      A            SGYOSH    R        B 14 25REFFLD(@SIREMT/SGYOSH QTRFIL/SIREMT) 
0113.00      A*                                                                          
0114.00      A          R DSPDTA03                                                       
0115.00      A                                      PULLDOWN                             
0116.00      A                                      TEXT(' 支払情報 03')                 
0117.00      A                                      CF03(03 ' 終了 ')                    
0118.00      A                                      CF10(10 ' 更新 ')                    
0119.00      A                                      CF23(23 ' 削除 ')                    
0120.00      A                                      CF12(12 ' 前画面 ')            
0121.00      A                                      ROLLUP(07)                     
0122.00      A                                      ROLLDOWN(08)                   
0123.00      A                                      SETOF(99)                      
0124.00      A                                      BLINK                          
0125.00      A                                  1 27' 仕入先マスターの照会 '       
0126.00      A                                      DSPATR(RI)                     
0127.00      A                                  3  2' 仕入先コード '               
0128.00      A            SRCODE         4A  O  3 15TEXT(' 仕入先コード ')         
0129.00      A  91                                  ERRMSG('ロールアップ できない ' 91) 
0130.00      A  92                                  ERRMSG('ロールダウン できない ' 92) 
0131.00      A                                  4  2' 支払情報 '                   
0132.00      A                                      DSPATR(RI)                     
0133.00      A                                  5 10' 仕入先名 '                   
0134.00      A            SRNMJ         32A  B  5 25TEXT(' 仕入先名 ')             
0135.00      A*                                                                    
0136.00      A          R DSPDTA04                                                 
0137.00      A                                      PULLDOWN                       
0138.00      A                                      TEXT(' 督促条件 04')           
0139.00      A                                      CF03(03 ' 終了 ')              
0140.00      A                                      CF10(10 ' 更新 ')              
0141.00      A                                      CF23(23 ' 削除 ')              
0142.00      A                                      CF12(12 ' 前画面 ')            
0143.00      A                                      ROLLUP(07)                     
0144.00      A                                      ROLLDOWN(08)                  
0145.00      A                                      SETOF(99)                     
0146.00      A                                      BLINK                         
0147.00      A                                  1 27' 仕入先マスターの照会 '      
0148.00      A                                      DSPATR(RI)                    
0149.00      A                                  3  2' 仕入先コード '              
0150.00      A            SRCODE         4A  O  3 15TEXT(' 仕入先コード ')        
0151.00      A  91                                  ERRMSG('ロールアップ できない ' 91)
0152.00      A  92                                  ERRMSG('ロールダウン できない ' 92)
0153.00      A                                  4  2' 督促条件 '                  
0154.00      A                                      DSPATR(RI)                    
0155.00      A                                  5 10' 仕入先名 '                  
0156.00      A            SRNMJ         32A  B  5 25TEXT(' 仕入先名 ')            
0157.00      A*                                                                   
0158.00      A          R DSPDTA05                                                
0159.00      A                                      PULLDOWN                      
0160.00      A                                      TEXT(' 追加情報 05')          
0161.00      A                                      CF03(03 ' 終了 ')             
0162.00      A                                      CF10(10 ' 更新 ')             
0163.00      A                                      CF23(23 ' 削除 ')             
0164.00      A                                      CF12(12 ' 前画面 ')           
0165.00      A                                      ROLLUP(07)                    
0166.00      A                                      ROLLDOWN(08)                  
0167.00      A                                      SETOF(99)                     
0168.00      A                                      BLINK                          
0169.00      A                                  1 27' 仕入先マスターの照会 '       
0170.00      A                                      DSPATR(RI)                     
0171.00      A                                  3  2' 仕入先コード '               
0172.00      A            SRCODE         4A  O  3 15TEXT(' 仕入先コード ')         
0173.00      A  91                                  ERRMSG('ロールアップ できない ' 91) 
0174.00      A  92                                  ERRMSG('ロールダウン できない ' 92) 
0175.00      A                                  4  2' 追加情報 '                   
0176.00      A                                      DSPATR(RI)                     
0177.00      A                                  5 10' 仕入先名 '                   
0178.00      A            SRNMJ         32A  B  5 25TEXT(' 仕入先名 ')             
0179.00      A*                                                                    
0180.00      A          R DSPDTA06                                                 
0181.00      A                                      PULLDOWN                       
0182.00      A                                      TEXT(' 更新情報 06')           
0183.00      A                                      CF03(03 ' 終了 ')              
0184.00      A                                      CF10(10 ' 更新 ')              
0185.00      A                                      CF23(23 ' 削除 ')              
0186.00      A                                      CF12(12 ' 前画面 ')            
0187.00      A                                      ROLLUP(07)                     
0188.00      A                                      ROLLDOWN(08)                   
0189.00      A                                      SETOF(99)                      
0190.00      A                                      BLINK                          
0191.00      A                                  1 27' 仕入先マスターの照会 '       
0192.00      A                                      DSPATR(RI)                    
0193.00      A                                  3  2' 仕入先コード '              
0194.00      A            SRCODE         4A  O  3 15TEXT(' 仕入先コード ')        
0195.00      A  91                                  ERRMSG('ロールアップ できない ' 91)
0196.00      A  92                                  ERRMSG('ロールダウン できない ' 92)
0197.00      A                                  4  2' 更新情報 '                  
0198.00      A                                      DSPATR(RI)                    
0199.00      A                                  5 10' 仕入先名 '                  
0200.00      A            SRNMJ         32A  B  5 25TEXT(' 仕入先名 ')   


         

[解説]

メニュー・バーは最上部だけのひとつのレコードであり

0029.00      A          R MNUBAR                    MNUBAR                             
0030.00      A                                      MNUBARDSP                          
0031.00      A                                      MNUBARSW(CA09)                     
0032.00      A                                      CF03(03 ' 終了 ')                  
0033.00      A*                                     OVERLAY PUTRETAIN                  
0034.00      A*%%TS  SD  19940302  221529  QTR         REL-V2R2M0  5738-PW1            
0035.00      A            MNUFLD         2Y 0B  1  2                                   
0036.00      A                                      MNUBARCHC(1 DSPDTA01 ' 基本情報 ') 
0037.00      A                                      MNUBARCHC(2 DSPDTA02 ' 分類情報 ') 
0038.00      A                                      MNUBARCHC(3 DSPDTA03 ' 支払情報 ') 
0039.00      A                                      MNUBARCHC(4 DSPDTA04 ' 督促条件 ') 
0040.00      A                                      MNUBARCHC(5 DSPDTA05 ' 追加情報 ') 
0041.00      A                                      MNUBARCHC(6 DSPDTA06 ' 更新情報 ') 

 

である。

MNUBARCHC(1 DSPDTA01 ‘ 基本情報 ‘)

のようにひとつのメニュー項目はプル・ダウンとして別の画面を用意しておき
その画面レコードには

0043.00      A          R DSPDTA01                                                     
0044.00      A                                      PULLDOWN  

のように PULLDOWN を定義する必要がある。

[メニュー・バーRPGサンプル・ソース]

ソースはこちらから

0001.00 H DFTNAME(MNUBAR) DATEDIT(*YMD/)                                                  
0002.00 F********  メニュー・バー  ********************************************           
0003.00 FMNUBARFM  CF   E             WORKSTN                                             
0004.00 FSIREMT    IF   E           K DISK                                                
0005.00 F**********************************************************************           
0006.00 C*----------------------------------------------------+                           
0007.00 C     START         TAG                                                    |      
0008.00 C                   EXFMT     DSPHEAD                                      |      
0009.00 C*----------------------------------------------------+                           
0010.00 C                   SETOFF                                       99               
0011.00 C*( CF03 )- 終了                                                                  
0012.00 C     *IN03         IFEQ      *ON                                          CF12   
0013.00 C                   SETON                                        LR               
0014.00 C   LR              RETURN                                                        
0015.00 C                   END                                                    CF12   
0016.00 C*( 実行キー )                                                                    
0017.00 C                   SETOFF                                       99               
0018.00 C     SRCODE        CHAIN     SIREMT                             99               
0019.00 C   99              SETON                                        61               
0020.00 C   99              GOTO      START                                               
0021.00 C                   Z-ADD     1             MNUFLD                                
0022.00 C                   MOVEL     'AA'          SRNMJ                                 
0023.00 C*----------------------------------------------------+                           
0024.00 C     DSPLY         TAG                                                    |    
0025.00 C                   WRITE     INZMSG                                       |    
0026.00 C                   EXFMT     MNUBAR                                       |    
0027.00 C*----------------------------------------------------+                         
0028.00 C                   SETOFF                                       99             
0029.00 C*( CF03 )- 終了                                                                
0030.00 C     *IN03         IFEQ      *ON                                          CF12 
0031.00 C                   SETON                                        LR             
0032.00 C   LR              RETURN                                                      
0033.00 C                   END                                                    CF12 
0034.00 C*( CF12 )- 前画面                                                              
0035.00 C     *IN12         IFEQ      *ON                                          CF12 
0036.00 C                   SETOFF                                       12             
0037.00 C                   GOTO      START                                             
0038.00 C                   END                                                    CF12 
0039.00 C*( 実行キー )                                                                  
0040.00 C                   GOTO      DSPLY                                             
0041.00 C     END           TAG     


                                                    

[解説]

RPG では特にメニュー・バー独自のコーディングは必要ない。
表示の方法は

0025.00 C                   WRITE     INZMSG                                       |    
0026.00 C                   EXFMT     MNUBAR                                       |

のように通常の表示と変わるところはない。