RPG

110. POPUPウィンドウの基礎 (1)

サブファイルの解説が終えた次の段階として POPUPウィンドウについて解説する。
POPUPウィンドウを使用する目的は親画面の表示の上に、小さな小窓の表示を行うことである。
親画面の上に重ねて表示を行う理由は、前の表示もできるだけ残して同時に表示を行いたい
からであって、コード検索やちょっとした項目の候補を表示するために利用されることが多い。
簡単な POPUPウィンドウの表示の例を以下に示す。

この図は4行目の「商品コード」の欄にカーソルを位置づけてF4=プロンプト・キーを押したときに表示
される POPUPウィンドウである。
元の親プログラムは「ANS004」という名前であるが、その中で別のPOPUPウィンドウ表示の
ANS005」という名前のプログラムを呼び出して表示している。
POPUPウィンドウ・プログラムを別の単独のプログラムとして作成しているのは他のプログラムからでも
呼び出して使用できるようにとのオブジェクトの再利用による考えがあってのことである。

さて、それでは POPUPウィンドウの DSPF のソースを紹介する。

【 DSPF ソース 】
     A                                      DSPSIZ(24 80 *DS3)          
     A                                      MSGLOC(24)                  
     A                                      PRINT                       
     A          R WINDOW                                                
     A                                      WINDOW(&WNDL &WNDP 13 48)   
     A                                      TEXT(' ウィンドゥ ')        
     A                                      OVERLAY                     
     A                                      PROTECT                     
     A                                      CLRL(*NO)                   
     A                                      BLINK                       
     A                                      CF12(12 ' 前画面 ')         
     A                                      ROLLUP(14 ' 次頁 ')         
     A                                      ROLLDOWN(15 ' 前頁 ')       
     A            WNDL           2S 0P                                  
     A            WNDP           2S 0P                                  
     A                                  1 14' 商品コード照会 '          
     A                                      DSPATR(HI)                  
     A                                      TEXT(' 見出し ')            
     A                                  3  2' オプションを入力して,実行キーを +  
     A                                       押してくだ '               
     A                                  4  2' さい。 '       
     A                                  5  4'1= 選択 '       
     A                                  1  1'ANS005'         
     A                                  6  1'OPT'            
     A                                      DSPATR(HI)       
     A                                  6  6' 商品 テーn゙'     
     A                                      DSPATR(HI)       
     A                                  6 21' 商品名 '       
     A                                      DSPATR(HI)       
     A            OPT001         1A  B  7  2                 
     A            OPT002         1A  B  8  2                 
     A            OPT003         1A  B  9  2                 
     A            OPT004         1A  B 10  2                 
     A            OPT005         1A  B 11  2                 
     A            CDR001        10A  O  7  5                 
     A            CDR002        10A  O  8  5                 
     A            CDR003        10A  O  9  5                 
     A            CDR004        10A  O 10  5                 
     A            CDR005        10A  O 11  5                 
     A            NMR001        24A  O  7 16                 
     A            NMR002        24A  O  8 16                 
     A            NMR003        24A  O  9 16                  
     A            NMR004        24A  O 10 16                  
     A            NMR005        24A  O 11 16                  
     A                                 12 33'F12= 前画面 '    
     A          R #DUMMY                    ASSUME            
     A                                      FRCDTA            
     A                                      PUTOVR            
     A            DMY            2   O  1  2DSPATR(ND)
【 解説 】

既にお気づきかも知れないが、このPOPUPは サブファイルを使用していない。
配列型による処理である。実は WINDOWキーワードと SFLCTLキーワードは並存させることは
できない。
従って POPUP の DDS は配列型として記述する必要がある。

WINDOW(&WNDL &WNDP 13 48) がこのDSPF がPOPUPウィンドウであることを示している。
&WNDL および &WNDP

     A            WNDL           2S 0P                                  
     A            WNDP           2S 0P  

としてプログラム・フィールドとして非表示で内部で定義されており、&WNDL は、このPOPUPの
左上端の開始行であり、 &WNDP はPOPUPの左上端の開始桁を示している。
この &WNDL, &WNDP を固定値ではなく変数値として定義しているのはPOPUPの表示位置
を動的に変化させるためである。
次に
WINDOW(&WNDL &WNDP 13 48) の値 13 は POPUPの行数であり、値 48は POPUP
の横幅を示す桁数である。