これと同様に 4 つのサブファイルを表示するプログラムがあります。
COL1 COL2 COL3
SFLAA----------------------------|
1 9999 9999 9999
2 9999 9999 9999
3 9999 9999 9999
*More...
SFLBB----------------------------|
1 9999 9999 9999
2 9999 9999 9999
3 9999 9999 9999
*More...
SFLCC----------------------------|
1 9999 9999 9999
2 9999 9999 9999
3 9999 9999 9999
*More...
SFLDD----------------------------|
1 9999 9999 9999
2 9999 9999 9999
3 9999 9999 9999
*More...
これらのサブファイルにはさまざまな種類の要約情報が表示され、ユーザーはこれらの要約番号のいずれかをクリックして、基礎となる詳細に「ドリルダウン」できることを望んでいます。そのためには、どのサブファイルのどのレコードをクリックしたかを知る必要があります。
からカーソル位置を取得しているINFDS
ので、ユーザーが画面をクリックすると、どのサブファイルをクリックしているかがわかります (クリックした行がわかるため)。
サブファイルは「アクティブな」サブファイルであるため、キーワードはサブファイルに対して素晴らしく機能します(プログラムは を実行し、SFLCSRRRN
他のすべての制御フォーマットは を介して表示されます)。これまでのところ、サブファイルのどのレコードがクリックされたかを判断する方法がわかりませんでした。SFLAA
EXFMT CTLAA
WRITE
SFLBB
SFLCC
SFLDD
各サブファイルには最大 100 件のレコード (一度にすべて読み込まれる) が保持されるため、ユーザーがサブファイルをクリックする前にスクロールした可能性があります (おそらくそうです)。
「アクティブでない」サブファイルの 1 つをクリックした場合、ユーザーがクリックしたサブファイル レコードを特定するにはどうすればよいですか?
---- 編集開始 ----
ユーザーが画面上でクリックした行/列を取得できます。問題は、ユーザーが SFLBB、SFLCC、または SFLDD を下にスクロールして 75 番目のサブファイル レコードを表示し、そのサブファイルをクリックしたときです。画面の 8 行目 (これは SFLBB の最初の行になります) をクリックしたことはわかりますが、それが SFLBB のレコード 75 であることはわかりません。
---- 編集終了 ----
SFLCSRRRN
、SFLRCDNBR
、およびをさまざまな組み合わせで試しましSFLSCROLL
たが、非アクティブなサブファイルに対して何も機能しません。
からの関連コードは次のDSPF
とおりです。
A DSPSIZ(24 80 *DS3)
A MOUBTN(*ULP CF06)
A R SFLAA SFL
A RRN1 4Y 0O 4 11EDTCDE(Z)
A R CTLAA SFLCTL(SFLAA)
A SFLSIZ(9999)
A SFLPAG(0003)
A CF03
A OVERLAY
A SFLCSRRRN(&ARRN)
A 10 SFLDSP
A SFLDSPCTL
A N10 SFLCLR
A 11 SFLEND(*MORE)
A ARRN 5S 0H
A 3 2'SFLAA'
A R SFLBB SFL
A RRN2 4Y 0O 9 11EDTCDE(Z)
A R CTLBB SFLCTL(SFLBB)
A SFLSIZ(9999)
A SFLPAG(0003)
A OVERLAY
A* Doesn't work SFLCSRRRN(&BRRN)
A 15 SFLDSP
A SFLDSPCTL
A N15 SFLCLR
A 16 SFLEND(*MORE)
A* Doesn't work BRRN 5S 0H
A* Doesn't work BRRN2 5S 0H SFLSCROLL
A 8 2'SFLBB'
サブファイルと制御レコードはSFLCC/CTLCC
とSFLDD/CTLDD
論理的に同じSFLBB/CTLBB
なので省略しました。
関連する RPGLE コード:
ftestd cf e workstn sfile(sflaa: rrn1)
f sfile(sflbb: rrn2)
f sfile(sflcc: rrn3)
f sfile(sfldd: rrn4)
f infds(cusloc)
...
dcusloc ds
d rowcol 370 371b 0
...
drrn1 s 4 0 inz(0)
drrn2 s 4 0 inz(0)
drrn3 s 4 0 inz(0)
drrn4 s 4 0 inz(0)
...
c/free
...
begsr mouse_sr;
row# = rowcol / 256;
col# = %rem(rowcol: 256);
select;
when row# >= 4 and row# <= 6;
chain arrn sflaa;
if %found();
exsr detail1_sr;
endif;
when row# >= 9 and row# <= 11;
chain brrn sflbb;
if %found();
exsr detail2_sr;
endif;
when row# >= 14 and row# <= 16;
chain crrn sflcc;
if %found();
exsr detail3_sr;
endif;
when row# >= 19 and row# <= 21;
chain drrn sfldd;
if %found();
exsr detail4_sr;
endif;
endsl;
endsr;
...
c/end-free