星期二, 10月 31, 2023

2000-03-20 如何在 AS/400 應用程式中抓取游標位置 ?


如何在 AS/400 應用程式中抓取游標位置 ? 

AS/400 系統無法像 PC 軟體直接追蹤使用者敲擊哪一鍵, AS/400 是於終端機
將透過按 "執行鍵(ENTER)"整個劃面資料送出至 AS/400 的, AS/400 處理完資
料後, 再將結果畫面送回終端機, 故 AS/400 應用程式中抓取游標位置, 須按
按 "執行鍵(ENTER)", 才能得到游標位置.

方法有兩種 :
一  : 於程式中畫面檔案宣告 INFDS 取其欄位值加以計算得知,
二  : 直接於畫面檔案 DDS 中加入 RTNCSRLOC Keyword , 取其系統傳回值,
而 RTNCSRLOC Keyword 有二種指定方式, 
一種為取 游標位置 RTNCSRLOC(*WINDOW &ROWN &COLN),
 另一種取欄位名稱 RTNCSRLOC(&RCDNAM &FLDNAM &CSRLOC)

--------------------------------

以下是畫面及程式 Source, 
DSPF : CSRPOSD
     A                                      PRINT
     A                                      INDARA
     A                                      CA03(03)
     A*-------------------------------------*
     A          R FMT01
     A*-------------------------------------*
     A                                      RTNCSRLOC(&RCDNAM &FLDNAM -
     A                                      &CSRLOC)
     A                                      RTNCSRLOC(*WINDOW &ROWN -
     A                                      &COLN)
     A            FLDNAM        10A  H
     A            RCDNAM        10A  H
     A            CSRLOC         4S 0H
     A            ROWN           3S 0H
     A            COLN           3S 0H
     A*
     A                                  1  2'CSRPOSD'
     A                                  1 30'Cursor Position Test'
     A                                  1 72DATE
     A                                      EDTCDE(Y)
     A            USER          10A  O  2  2
     A                                  2 72TIME
     A                                      EDTWRD('  :  :  ')
     A                                  7 38'LINE'
     A                                  7 47'COLUMN'
     A                                  8 27'INFDS ==>'
     A            V1LIN          3S 0O  8 38DSPATR(HI)
     A            V1COL          3S 0O  8 49DSPATR(HI)
     A                                 10  2'RTNCSRLOC(*WINDOW &ROWN &COLN) ==>'
     A            ROW            3S 0O 10 38DSPATR(HI)
     A            COL            3S 0O 10 49DSPATR(HI)
     A                                 12  2'RTNCSRLOC(&RCDNAM &FLDNAM &CSRLOC)'
     A            V1RCD         10A  O 12 38DSPATR(HI)
     A            V1FLD         10A  O 12 49DSPATR(HI)
     A            V1CSR          4S 0O 12 60DSPATR(HI)
      *
     A                                 14 27'TEXT  ==>'
     A            TEXT          30A  B 14 38
      *
     A                                 23  2'F3=EXIT'
     A                                 22 23'MOVE YOUR CURSOR AND PRESS ENTER'
                                            DSPATR(RI)
     A                                 24 67'Vengoal Chang'
                                            DSPATR(HI)

RPGLE : CSRPOSR
     FCSRPOSD   CF   E             WORKSTN
     F                                     INFDS(INFDS)
     D******************************************************
     D*     D E F I N E    PROGRAM STATUS PARM             *
     D******************************************************
     D                SDS
     D  PGMID                  1     10
     D  WRSTN                244    253
     D  USER                 254    263
     D******************************************************
     D*     D E F I N E    C O N S T A N T                 *
     D******************************************************
     D F3              C                   CONST(X'33')
     D******************************************************
     D*     D E F I N E    D A T A  - S T R U C T U R E    *
     D******************************************************
     D INFDS           DS
     D  KEY                  369    369
     D  LINCLM               370    371
     D                 DS
     D  DSWRK                  1      2B 0
     D  DSWRKB                 2      2
     C******************************************************
     C*             M A I N -  R O U T I N E               :
     C******************************************************
     C     *IN03         DOUEQ     *ON
     C                   EXFMT     FMT01
     C     *IN03         IFEQ      *OFF
     C*
     C                   Z-ADD     0             DSWRK
     C                   MOVEL     LINCLM        DSWRKB
     C                   Z-ADD     DSWRK         V1LIN
     C*
     C                   Z-ADD     0             DSWRK
     C                   MOVE      LINCLM        DSWRKB
     C                   Z-ADD     DSWRK         V1COL
     C*
     C                   Eval      ROW = ROWN
     C                   Eval      COL = COLN
     C*
     C                   MOVEL     RCDNAM        V1RCD
     C                   MOVEL     FLDNAM        V1FLD
     C                   Z-ADD     CSRLOC        V1CSR
     C*
     C                   END
     C                   END
     C*
     C                   MOVE      *ON           *INLR
     C                   RETURN



參考文件 : 
ILE RPG for AS/400 Reference, SC09-2508-11,

DDS for display files, SC41-5712


沒有留言: