2012-09-03 15 views
0

其实我并不是在询问有关实施的细节。我知道如何在整个屏幕中使用子文件实现单选列表,但是当我尝试将相同的原理应用于窗口时,事情并没有像预期的那样顺利。这里是DDS的窗口和子文件:如何使用AS400 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,因此单选列表中的某些选项将变得不可用,并且如果用户试图选择这样的选项,则窗口和单选列表将保留在屏幕上并且光标位于第一选项上,直到用户选择退出该窗口或选择一个可用选项。

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

回答

0

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

当我尝试类似的代码时,我无法选择 S0AVAL = 4的行。你如何能够'选择'不可用的选择?如果我使用光标键,光标跳过不可用的选择。如果我用鼠标点击,我会得到一个'禁止输入'键盘错误。你使用什么终端模拟器?我正在使用Windows的个人通信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 
+0

对不起,S0OPTN应该是10个字符长。我把它和另一个领域混合起来。关于选择一个不可用的选项,我不知道如何将光标放在它上面。我正在使用Windows的个人通信5.8。 –

相关问题