RPGⅢの対話型プログラムで画面のカーソル位置を取得

表示装置ファイルで実行キー、機能キーを押した時のカーソルの位置を取得します。
位置と押したキーによって、処理を分岐することができます。
「押したキーの種類」と「押したフィールド(位置)」がわかれば、処理を制御できます。

「押したキーの種類」は標識でチェックできます。標識がすべてオフなら実行キーになります(実行キーを押した時に標識をオンにできない)。

「押したフィールド(位置)」の取得方法は2種類あります。

方法1:ファイル情報データ構造(INFDS)からカーソルの値を取得する方法

F仕様書で表示装置ファイルのファイル情報データ構造のデータ構造名を指定します。
ファイル情報データ構造からはカーソルの位置情報だけでなく、サブファイルの情報も取得できます。
I仕様書でファイル情報データ構造から、使いたい領域のみを切り出します。

表示装置ファイルとRPGは以下の続きです。
RPGⅢの対話型プログラムで値の受け渡しと妥当性チェック

表示装置ファイルの作成

SAMPLIB/QDSPSRCのHELLOFMを編集し、コンパイルします。

カーソルの位置を表す「行」と「列」のフィールドを定義します。

RPG3プログラムの作成

SAMPLIB/QRPGSRCのHELLOを編集し、コンパイルします。

370と371桁に16進数でカーソル位置の値が入っています。
256で割ると「行」の値になり、余りが「列」の値になります。

F3キーでプログラムを終了するようにしました。

表示装置固有のフィードバック情報を持つ INFDS のコーディング例

20151001_1

RPG3プログラムの実行

実行して確認します。
CALL SAMPLIB/HELLO

任意の位置にカーソルを合わせ、実行キーを押します。
カーソルの位置が計算され、画面に表示されました。

20151001_2

方法2:RTNCSRLOCからフォーカスしているフォールドを取得する方法

上記の方法でファイル情報データ構造から、実行キーを押したときのカーソルの行と列が取得できます。
カーソルの位置を取得する目的が、フォーカスしているフィールドをもとめるなら、RTNCSRLOCを使い方法が便利です。
行と列はわかりませんが、実行キーを押したときの
「レコード様式名」
「フィールド名」
「そのフィールドの左から何桁目」
を取得できます。

表示装置ファイルの作成

SAMPLIB/QDSPSRCのHELLOFMを編集し、コンパイルします。
レコードレベルでRTNCSRLOCキーワードで取り込む変数を指定します。

RTNCSRLOC(&RCD &FLD &POS)
RCD=Display file record
FLD=Screen field name
POS=Position where the cursor is placed on the record’s field

RPG3プログラムの作成

SAMPLIB/QRPGSRCのHELLOを編集し、コンパイルします。

RPG3プログラムの実行

実行して確認します。
CALL SAMPLIB/HELLO

任意の位置にカーソルを合わせ、実行キーを押します。
そのときカーソルの置かれていた「レコード様式名」「フィールド名」「そのフィールドの左から何桁目」を取得できます。また、SFLCSRRRNを使うとサブファイルの上のカーソルの置かれていたサブファイルレコードの位置を取得できます。

20151001_2

スポンサーリンク
memordmレクタングル(大)
memordmレクタングル(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
memordmレクタングル(大)