RPG

346. 押しボタン

これからのシリーズでは 5250エミュレータでもできるGUIコントロールを
紹介していく。
IBM i もGUIコントロールはないわけではなくいくつかを
用意している。
その中でも最初は押しボタンである。
5250エミュレータ画面にボタンらしきものが現れて
押しボタンを押すと押された回数をカウント・アップするというものである。

最初に実行中の画面を紹介すると

[押しボタンDSPF: BUTTONFM ]

http://218.44.135.18/QSYS.LIB/QTRSRC.LIB.LIB/QDSPSRC.FILE/BUTTONFM.MBR

ソースはこちらから

0001.00      A                                      DSPSIZ(24 80 *DS3)                 
0002.00      A                                      MSGLOC(24)                         
0003.00      A                                      PRINT                              
0004.00      A          R DSPDTA01                                                     
0005.00      A*%%TS  SD  20070817  120013  QTR         REL-V5R4M0  5722-WDS            
0006.00      A                                      TEXT(' 明細画面 01')               
0007.00      A                                      CF03(03 ' 終了 ')                  
0008.00      A                                      SETOF(99)                          
0009.00      A                                      BLINK                              
0010.00      A                                  1 27' 押しボタン '                     
0011.00      A                                      DSPATR(HI)                         
0012.00      A                                  3  2' 下記は押しボタンのサンプルです ' 
0013.00      A                                  4  3'OK ボタンを押したときは押した +   
0014.00      A                                       回数をカウントします。 '          
0015.00      A                                  8  4' 押した回数 . . . . . . . . . .'  
0016.00      A            KAISU          3Y 0B  8 37                                   
0017.00      A            PSHFLD         2Y 0B  8 45PSHBTNFLD(*RSTCSR (*NUMCOL 1))     
0018.00      A                                      PSHBTNCHC(1 ' OK ' ENTER)        
0019.00      A            PSHF10         2Y 0B 10 45PSHBTNFLD(*RSTCSR (*NUMCOL 1))     
0020.00      A*                                     PSHBTNCHC(1 ' F1O ' CF10)       
0021.00      A                                      PSHBTNCHC(1 'ボタン 10 ' CF10)       
0022.00      A                                 10 55' ←クリックまたは CF10'           
0023.00      A            DSPMSG        40A  O 20  4DSPATR(HI)                         
0024.00      A                                 23  2'F3= 終了 ' 
0025.00      A                                      COLOR(BLU)  



[解説]

PSHBTNFLD というものが押しボタンを表すキー・ワードである。
PCHBTNCHC がボタンの表示文字列と機能キーである。
ボタンそのものは 2バイトの数字フィールドとして定義されており
ボタンが押されたときは値に1が入る。

[押しボタンRPG: BUTTON]

ソースはこちらから

0001.00 H DFTNAME(BUTTON) DATEDIT(*YMD/)                                                 
0002.00 F********  押しボタン *************************************************          
0003.00 FBUTTONFM  CF   E             WORKSTN                                            
0004.00 F**********************************************************************          
0005.00 D F10MSG          C                   CONST('F10 ボタンが押されました。 ')       
0006.00 D OKMSG           C                   CONST('OK ボタンが押されました。 ')        
0007.00 D ON              S              2S 0 INZ(1)                                     
0008.00 C*----------------------------------------------------+                          
0009.00 C     DSPLY         TAG                                                    |     
0010.00 C                   EXFMT     DSPDTA01                                     |     
0011.00 C*----------------------------------------------------+                          
0012.00 C                   SETOFF                                       99              
0013.00 C*( CF03 )- 終了                                                                 
0014.00 C     *IN03         IFEQ      *ON                                          CF03  
0015.00 C                   SETON                                        LR              
0016.00 C                   RETURN                                                       
0017.00 C                   ENDIF                                                  CF03  
0018.00 C*( 実行キー )                                                                   
0019.00 C                   EXSR      COUNT                                              
0020.00 C                   GOTO      DSPLY                                              
0021.00 C******************************************************                          
0022.00 C     *INZSR        BEGSR                                                        
0023.00 C******************************************************                          
0024.00 C                   Z-ADD     0             KAISU            
0025.00 C                   ENDSR                                    
0026.00 C******************************************************      
0027.00 C     COUNT         BEGSR                                    
0028.00 C******************************************************      
0029.00  *( F10 ボタン )                                             
0030.00 C     PSHF10        IFEQ      ON                             
0031.00 C                   MOVEL(P)  F10MSG        DSPMSG           
0032.00 C                   ADD       1             KAISU            
0033.00 C                   ELSE                                     
0034.00  *( 押しボタン )                                             
0035.00 C     PSHFLD        IFEQ      ON                             
0036.00 C                   MOVEL(P)  OKMSG         DSPMSG           
0037.00 C                   ADD       1             KAISU            
0038.00 C                   ELSE                                     
0039.00 C                   MOVE      *BLANKS       DSPMSG           
0040.00 C                   ENDIF                                    
0041.00 C                   ENDIF                                    
0042.00 C                   ENDSR  


                                 

[解説]

ボタンが押されたときは値が ON (=1)になることを利用して
処理を行っている。