我有同樣顯示4子文件到該程序:獲取文件記錄數量的非活躍子文件(S)
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條記錄(全部一次加載),因此用戶在點擊子文件之前可能(有可能)滾動子文件。
如何判斷用戶點擊哪個子文件記錄,如果他們點擊其中一個「非活動」子文件?
---- BEGIN編輯----
我可以得到行/用戶點擊屏幕上就好了,其中山口,我的問題是當用戶滾動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
對不起巴克,我沒有表達出我的問題。獲取行/列工作正常。我的問題是,當用戶滾動SFLBB/CC/DD到(例如)子文件記錄75,然後點擊子文件。我可以告訴用戶點擊了屏幕的X行(我們會說在SFLBB中),但我無法確定當前顯示哪個子文件記錄。 –
對不起本尼,我的錯誤不是你的。看我的編輯。需要讀取控制記錄格式才能獲取I/O域(如SFLCSRRRN)。 –
謝謝巴克,就是這樣。閱讀你的評論後,我發現我曾經遇到過類似的問題,但忘記了我需要閱讀其他控制記錄。感謝幫助! –