画面のカーソル位置情報関連
画面上のカーソルの位置情報を取得する方法についてお伝えします。
画面の項目のPOP-UP検索等、カーソルがどの項目に置かれている項目を判断する場合に利用できます。
この方法が使用できない昔のバージョンではカーソルが何行何桁目にあるのかを取得して判断していたようです。
昔のソースを引き続き使用している場合は、今でも昔ながらの方法でやっている場合を見かけます。
紹介する方法であれば画面変更で項目位置が変更されても、問題ありません。
DDS側のコーディングです
-
A R #FMT10
-
A RTNCSRLOC(&D#RECD &D#FELD &D#POS)
-
A CSRLOC(D#LIN D#COL)
-
A D#RECD 10A H TEXT('カーソル レコード')
-
A D#FELD 10A H TEXT('カーソル フィールド')
-
A D#POS 4S 0H TEXT('カーソル 位置')
-
A D#LIN 3S 0H TEXT('カーソル 行 ')
-
A D#COL 3S 0H TEXT('カーソル 桁 ')
-
A*
-
A D1KUBN 2Y 0B 6 11TEXT('区分')
-
A D1SHCD 13Y 0B 7 29TEXT('商品CD')
キーワード RTNCSRLOCを指定します。
パラメータには、レコード名、フィールド名、カーソル位置(任意)を指定します。
例では
レコード名=&D#RECD
フィールド名=&D#FELD
カーソル位置=&D#POS
とします。
続いて、レコード名、フィールド名を10桁のAタイプの非表示項目として定義します。
カーソル位置情報は4桁のSタイプの非表示項目として定義します。
この例では、カーソルが画面の商品CDにフィールドがあった場合は
D#RECDにはレコード名の"#FMT10"が入り、D#FELDには商品CDのフィールド名"D1SHCD"が入ります。フィールド外の場合はブランクになります。
任意項目のカーソル位置ですが、商品CDフィールドの中でのカーソル位置が入ります。
例えば、カーソルが商品CDフィールドの中の3桁目にあれば、3が入ります。
※カーソル位置に関しては未検証です。先ほどマニュアルを見直して発見しました。あまり利用する事も無い様に思います。
RPG側のコーディングです。
-
C SELEC
-
C**- 区分検索
-
C D#FELD WHEQ 'D1KUBN'
-
C MOVEL*BLANK P#SRCD
-
C CALL 'CCM621' PAR621
-
C P#SRCD IFNE *BLANK
-
C MOVELP#SRCD D1KUBN
-
C* MDT OFF
-
C MOVEL*BLANK W#MDT
-
C ENDIF
-
C**-- 商品コード検索
-
C D#FELD WHEQ 'D1SHCD'
-
C MOVEL*BLANK P#SYC2
-
C CALL 'CDM050' PAR050
-
C P#SYC2 IFNE *BLANK
-
C MOVELP#SYC2 D1SHCD
-
C* MDT OFF
-
C MOVEL*BLANK W#MDT
-
C ENDIF
-
C ENDSL
実際の処理では、D#FELDの内容を判断してフィールドに見合った処理を行えばいいと思います。
レコード情報は、レコード違いでフィールド名が重複する様な事がなければ判断する必要はないと思います。
TrackBack URL :
Comments (0)