如何在AS400 DDS窗口中创建单个选择列表?

时间:2012-09-03 14:06:41

标签: ibm-midrange

实际上我并没有要求提供有关实施的详细信息。我知道如何在整个屏幕中使用子文件实现单选列表,但是当我尝试将相同的原理应用于窗口时,事情并没有按预期完成。这是窗口和子文件的DDS:

A        R SWCCHK03                      SFL
A          S0AVAL        1Y  0H          SFLCHCCTL
A          S0OPTN       10A   O     
A        R SWCCHK04                      SFLCTL(SWCCHK03)
A                                        OVERLAY
A                                        SFLDSP
A                                        SFLDSPCTL
A 30                                     SFLCLR
A 31                                     SFLEND
A                                        SFLSIZ(0006)
A                                        SFLPAG(0005)
A                                        WINDOW(*DFT 13 32)
A                                        SFLSNGCHC(*RSTCSR *AUTOSLT)
A                                     1 3'Option'

以下是RPGLE中用于显示和处理所选选项的循环:

C      SR300      BEGSR
C      *IN12      DOWEQ      *OFF
C                 EXFMT      SWCCHK04
C      *IN12      IFEQ       *OFF
C                 GOTO       SR300E
C                 ENDIF
C                 READC      SWCCHK03
C      S0AVAL     IFEQ       4
C                 ITER
C                 ENDIF
                  .
                  .
                  .
C                 ENDDO
C      SR300E     ENDSR

在某些情况下,我想将S0AVAIL设置为4,以便单个选择列表中的某些选项不可用,如果用户尝试选择此选项,则窗口和单个选择列表将保留在屏幕上光标位于第一个选项上,直到用户选择退出窗口或选择可用选项。

如果用户选择可用选项,则此实现没有问题。但是,如果用户选择了不可用的选项,则窗口将根据需要保留在屏幕上,但光标将移动到窗口的左上角,而不是保留在选择列表中的第一个选项。即使我可以手动将光标移回选项,下次选择不可用选项时,它也会再次转到窗口角落。这怎么发生的?以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这段代码是如何编译的?在32列宽窗口中有一个50列子文件字段(S0OPTN)。确保您运行的是您认为应该使用的代码。

当我尝试类似的代码时,我无法选择 S0AVAL = 4的行。你怎么能'选择'一个不可用的选择?如果我使用光标键,光标会跳过不可用的选择。如果我用鼠标点击,我会收到“输入禁止”键盘错误。你使用什么终端模拟器?我正在使用Personal Communications 6.0 for Windows。

工作代码如下:

 A*
 A          R SWCCHK03                  SFL
 A            S0AVAL         1Y 0H      SFLCHCCTL
 A            S0OPTN        10A  O  6 11
 A*
 A          R SWCCHK04
 A                                      SFLCTL(SWCCHK03)
 A                                      OVERLAY
 A  27                                  SFLDSP
 A N28                                  SFLDSPCTL
 A  28                                  SFLCLR
 A  29                                  SFLEND
 A                                      SFLSIZ(06)
 A                                      SFLPAG(05)
 A                                      CF12(12)
 A                                      WINDOW(*DFT 13 32)
 A                                      SFLSNGCHC(*RSTCSR *AUTOSLT)
 A            SFLRRN         4S 0H      SFLRCDNBR(CURSOR)
 A                                  1 10'Title'
 A            CHOICE         4S 0   3  1
 A                                  4  5'Choose one'                               

 h/copy qrpglesrc,stdhspec
 h* dbgview(*list)

 fsotest    cf   e             workstn
 f                                     SFILE(SWCCHK03:RRN)

 c* clear sfl
 c                   z-add     1             sflrrn
 c                   setoff                                       272829
 c                   seton                                        28
 c                   write     SWCCHK04
 c                   setoff                                       28
 c* load sfl
 c     1             do        9             rrn               4 0
 c                   movel     rrn           s0optn
 c                   if        rrn = 4
 c                   z-add     4             s0aval
 c                   else
 c                   z-add     0             s0aval
 c                   endif
 c                   write     SWCCHK03
 c                   seton                                        27
 c                   enddo

 C     *IN12         DOWEQ     *OFF
 C                   EXFMT     SWCCHK04

 C     *IN12         IFEQ      *ON
 C                   LEAVE
 C                   ENDIF

 C                   READC     SWCCHK03                               80
 C  n80              do
 C                   movel     rrn           choice
 C                   z-add     0             S0aval
 C                   update    SWCCHK03
 C                   enddo
 C                   ENDDO

 c                   seton                                        lr