0

实际上,我并不是在询问有关实施的详细信息。我知道如何在整个屏幕中实现带有子文件的单个选择列表,但是当我尝试将相同的原理应用于窗口时,事情并没有按预期进行。这是窗口和子文件的 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,这样单选列表中的某些选项将变得不可用,如果用户尝试选择此类选项,则窗口和单选列表将保留在屏幕上,光标位于第一个选项,直到用户选择退出窗口或选择可用选项。

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

4

1 回答 1

0

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

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

工作代码如下:

 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
于 2012-09-04T16:01:00.227 回答