RPG

466. RPGでテキスト・エリアを作るには

テキスト・エリアまたはテキストBOXと呼ばれるGUIコントロールは
複数行の文字テキストを入力するコントロールである。

IBM iでもテキスト・エリアまたはテキストBOXと呼ばれる
GUIコントロールを作ることができる。
IBMはどうもMicrosoftの真似をするのが嫌いらしく
全く別の用語を使うので一般にこれがテキスト・エリアとはは
認識されないようである。
次の入力画面を見て欲しい。
 

これはDDSのCNTFLDというキー・ワードを使って
ある大きなひとつのフィールドを複数行に分割して表示したものである。
もちろんこれは表示だけでなく入力することもできる。
CNTFLDキー・ワードはある長いフィールドの
一行の桁数に分割して表示するキー・ワードである。
DDSソースを次に紹介する。

[ CNTFLDFM ]

ソースはこちらから

0001.00      A                                      DSPSIZ(24 80 *DS3)            
0002.00      A                                      MSGLOC(24)                    
0003.00      A******************************************************************* 
0004.00      A          R DSPDTA01                                                
0005.00      A******************************************************************* 
0006.00      A*%%TS  SD  20210805  150710  QTR         REL-V6R1M0  5761-WDS       
0007.00      A                                      TEXT(' 明細画面 01')          
0008.00      A                                      CF03(03 ' 終了 ')             
0009.00      A                                      CF12(12 ' 前画面 ')           
0010.00      A                                      SETOF(99)                     
0011.00      A                                      BLINK                         
0012.00      A                                  1 21' 部品検収の入力 '            
0013.00      A                                      DSPATR(HI)                    
0014.00      A            DSPMSG         6A  O  1 53TEXT(' 保守モード ')          
0015.00      A                                      DSPATR(HI)                    
0016.00      A                                  2 40' 検収日 '                    
0017.00      A            BKDATE         8Y 0O  2 49EDTCDE(W)                     
0018.00      A                                  3  2' 部品コード '                
0019.00      A            BKNCOD        12A  O  3 17TEXT(' 部品コード ')          
0020.00      A                                  4  2' 部品名 '                    
0021.00      A            BHNAME        20O  O  4 17TEXT(' 部品名 ')              
0022.00      A                                  5  2' 検収数 '                    
0023.00      A            BKNUKO         7Y 0B  5 17TEXT(' 検収数 ')              
0024.00      A                                      EDTCDE(K)                   
0025.00      A                                  9  2' 摘要 '                    
0026.00      A            BKTEKI       408A  B  9 17CNTFLD(034)                 
0027.00      A*                                                                 
0028.00      A                                 23  2'F3= 終了 '                 
0029.00       ******************************************************************
0030.00      A          R DSPHEAD                                               
0031.00       ******************************************************************
0032.00      A                                      TEXT(' 初期画面 ')          
0033.00      A*            11:59:33    QSECOFR     REL-R06M00  5714-UT1         
0034.00      A                                      CF03(03 ' 終了 ')           
0035.00      A                                      ROLLUP(07)                  
0036.00      A                                      ROLLDOWN(08)                
0037.00      A                                      BLINK                       
0038.00      A                                  1 21' 部品検収の入力 '          
0039.00      A                                      DSPATR(HI)                  
0040.00      A                                  2 40' 検収日 '                  
0041.00      A            BKDATE         8Y 0B  2 49                            
0042.00      A                                      EDTCDE(W)                   
0043.00      A                                  3  2' 部品コード '              
0044.00      A            BKNCOD        12A  B  3 17TEXT(' 部品コード ')        
0045.00      A                                 11 13' 部品コードを入れて +      
0046.00      A                                       実行キーを押してください ' 
0047.00      A                                      DSPATR(HI)                  
0048.00      A            F3FLD          2Y 0B 23  2PSHBTNFLD(*RSTCSR (*NUMCOL 1))      
0049.00      A                                      TEXT(' 終了ボタン ')                
0050.00      A                                      PSHBTNCHC(1 '*END' CF03)            
0051.00       *******************************************************************       
0052.00      A          R ENDOPT                                                        
0053.00       *******************************************************************       
0054.00      A                                      TEXT(' 終了画面 ')                  
0055.00      A                                      CF03(03 ' 終了 ')                   
0056.00      A                                      CSRLOC(LIN        POS)              
0057.00      A                                  1 34' 終了 '                            
0058.00      A                                      COLOR(PNK)                          
0059.00      A                                      DSPATR(HI)                          
0060.00      A                                  3  2' 処理されたレコード数 '            
0061.00      A                                  5 10' 追加  . . . . . :'                
0062.00      A            ADDREC         5Y 0O  5 35EDTCDE(4)                           
0063.00      A                                  6 10' 変更  . . . . . :'                
0064.00      A            CHGREC         5Y 0O  6 35EDTCDE(4)                           
0065.00      A                                  7 10' 削除  . . . . . :'                
0066.00      A            DLTREC         5Y 0O  7 35EDTCDE(4)                           
0067.00      A                                 11  2' 選択項目を打鍵して,実行キーを押 +
0068.00      A                                       してください。 '                   
0069.00      A                                      COLOR(BLU)                          
0070.00      A                                 13  5' データ入力の終了  . . . . . .'    
0071.00      A            ANS            1A  B 13 39VALUES('Y' 'N')                     
0072.00      A                                 13 53'Y=YES, N=NO'                  
0073.00      A            F3FLD          2Y 0B 23  2PSHBTNFLD(*RSTCSR (*NUMCOL 1)) 
0074.00      A                                      TEXT(' 終了ボタン ')           
0075.00      A                                      PSHBTNCHC(1 '*END' CF03)       
0076.00      A            PREV           2Y 0B 23 15PSHBTNFLD(*RSTCSR (*NUMCOL 1)) 
0077.00      A                                      TEXT(' 戻る ')                 
0078.00      A                                      PSHBTNCHC(1 '*PREV' CF12)      
0079.00      A            LIN            3S 0H                                     
0080.00      A            POS            3S 0H     


                                  

[解説]

0026.00      A            BKTEKI       408A  B  9 17CNTFLD(034)

フィールド : BKTEKI は 408バイトであるが CNTFLD(034) によって
一行は 34桁で 408 / 34 = 12行として表示されることになる。

[ RPG : CNTFLD ]

ソースはこちらから

001.00 H DFTNAME(CNTFLD) DATEDIT(*YMD/)BNDDIR('QC2LE')                                         
002.00 F******** *FILETEXT***********************************************                      
003.00 FCNTFLDFM  CF   E             WORKSTN                                                   
004.00 F                                     INFDS(INFDSF)                                     
005.00 F*****************************************************************                      
006.00  *    QTRSRC/QRPGLESRC(CNTFLD)                                                          
007.00  *     使用目的    :   更新 (*UPDATE)                                                   
008.00  *     作成日      :  2023/10/31         11:06:52                                       
009.00  *     作成者      :  QTR                                                               
010.00                                                                                         
011.00 D INFDSF          DS                  QUALIFIED                                         
012.00  * オープン・フィードバック域   160 BYTES 81-240                                        
013.00 D  OPNFBK                81    240                                          ファイル名  
014.00 D   ODP_TYPE             81     82                                         ODP タイプ   
015.00 D   FILE_NAME            83     92                                         ODP タイプ   
016.00 D   LIBRARY              93    102                                         ODP タイプ   
017.00 D   MEMBER              129    138                                          メンバー名  
018.00                                                                                         
019.00 D*( WORK 日付 YYMMDD データ 構造  )                                                       
020.00 D DATEDS          DS                                                                    
021.00 D  SRY                    1      2  0                                                   
022.00 D  SRYMD                  1      8  0                                                   
023.00 D  YYMMDD                 3      8  0                                                   
0024.00 D  YYMM                   3      6  0                                          
0025.00 D  MMDD                   5      8  0                                          
0026.00 D  YY                     3      4  0                                          
0027.00 D  MM                     5      6  0                                          
0028.00 D  DD                     7      8  0                                          
0029.00                                                                                
0030.00 D DSPMSG          S              6A                                            
0031.00                                                                                
0032.00 C*----------------------------------------------------+                        
0033.00 C                   GOTO      DSPLY                                            
0034.00 C*----------------------------------------------------+                        
0035.00 C*( 初期画面 )                                                                 
0036.00 C*----------------------------------------------------+                        
0037.00 C     START         TAG                                                    |   
0038.00 C                   EXFMT     DSPHEAD                                      |   
0039.00 C*----------------------------------------------------+                        
0040.00 C                   SETOFF                                       99            
0041.00 C*( CF03 )- 終了                                                               
0042.00 C     *IN03         IFEQ      *ON                                          CF03
0043.00 C                   SETON                                        LR            
0044.00 C                   EXSR      LRRTN                                            
0045.00 C   LR              RETURN                                                     
0046.00 C                   GOTO      START                                            
0047.00 C                   ENDIF                                                      
0048.00 C*( 実行キー )                                                                     
0049.00 C     GET_RECORD    TAG                                                            
0050.00 C                   SETOFF                                       90                
0051.00 C   90              MOVEL     ' 入力 '      DSPMSG                                 
0052.00 C  N90              MOVEL     ' 更新 '      DSPMSG                                 
0053.00 C  N90              EXSR      CHECK                                                
0054.00 C   99              GOTO      START                                                
0055.00 C*( 明細画面 )                                                                     
0056.00 C*-------------------------------------------------------------------------+       
0057.00 C     DSPLY         TAG                                                    |       
0058.00 C                   EXFMT     DSPDTA01                                     |       
0059.00 C*-------------------------------------------------------------------------+       
0060.00 C                   SETOFF                                       99                
0061.00 C*( CF03 )- 終了                                                                   
0062.00 C     *IN03         IFEQ      *ON                                          CF03    
0063.00 C                   SETON                                        LR                
0064.00 C                   EXSR      LRRTN                                                
0065.00 C   LR              RETURN                                                         
0066.00 C                   GOTO      DSPLY                                                
0067.00 C                   ENDIF                                                  CF03    
0068.00 C*( CF12 )- 前画面                                                                 
0069.00 C     *IN12         IFEQ      *ON                                          CF12    
0070.00 C                   SETOFF                                       12                
0071.00 C                   GOTO      START                                                
0072.00 C                   ENDIF                                                  CF12
0073.00 C*( 実行キー )                                                                 
0074.00 C                   EXSR      CHECK                                            
0075.00 C                   GOTO      DSPLY                                            
0076.00 C     END           TAG                                                        
0077.00 C******************************************************                        
0078.00 C     *INZSR        BEGSR                                                      
0079.00 C******************************************************                        
0080.00 C*  初期サイクルのみの実行                                                     
0081.00 C                   ENDSR                                                      
0082.00 C******************************************************                        
0083.00 C     CHECK         BEGSR                                                      
0084.00 C******************************************************                        
0085.00 C*( 明細チエック )                                                             
0086.00 C*                                                                             
0087.00 C                   ENDSR                                                      
0088.00 C******************************************************                        
0089.00 C     LRRTN         BEGSR                                                      
0090.00 C******************************************************                        
0091.00 C                   SETON                                        LR            
0092.00 C                   ENDSR