サブファイルの解説が終えた次の段階として 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
の横幅を示す桁数である。