Xiao Qing
作者Xiao Qing·2022-08-17 17:47
系统工程师·浪潮商用机器有限公司

IBM i 绿屏同样能做出漂亮的菜单界面

字数 12009阅读 4475评论 0赞 2

“如何在 IBM i 绿屏方式下实现 GUI 的按钮功能”介绍了用 PSHBTNFLD ( Push Button Field )关键字实现按钮功能 , 用户可以用鼠标或回车键来按动按钮激活对应的程序或命令,非常简单易用。

其实绿屏方式下也同样能做出漂亮的菜单界面,但它要比 Windows 更早, 1978 年, AS/400 的前身 System/38 正式支持外部描述显示文件的( External described display files ), 1979 开始支持 GUI 组件,可以在文字终端上支持“按钮”、“下拉菜单”、“滚动列表”等基本 GUI 组件, AS/400 文字终端显示功能进入了一个新时代。

下面通过一个例子来介绍 IBM i 的菜单界面的实现方法。

如上图所示,这个菜单界面由“作业”、“系统”、“操作员”、“设置”四个菜单组成,每个菜单被点击后,会展开相应的菜单项。

以“系统”菜单为例,它由“系统运行状态”、“硬盘工作状态”、“网络工作状态”菜单项组成。然后点击相应的菜单项,就会执行相对应的程序或命令。

菜单界面 DSPF 对应下面这段代码,由 6 个记录格式名( Record Format Name )组成,用于实现 MNUBARDSP 、 MNUBAR 和 PULLDOWN 菜单功能。


DSPF 代码:

     A*%%TS  SD  20220721  064418  XIAOQING    REL-V7R2M0  5770-WDS
     A*%%EC
     A************************************************************
     A*                                                                                                                                *
     A*  DISPLAY FILE                                                                                                       *
     A*                                                                                                                               *
     A*  EDITED BY XIAOQING,2022/7                                                                         *
     A*                                                                                                                                *
     A************************************************************
     A                                      DSPSIZ(24 80 *DS3)
     A                                      CA03(03)
     A                                      MNUBARSW(CA02)
     A                                      MNUCNL(CA12 12)
     A*                                     MNUBAR
     A          R MENUR1
     A*%%TS  SD  20220721  064418  XIAOQING    REL-V7R2M0  5770-WDS
     A                                      MNUBARDSP(MENUM1 &MNUCHOICE)
     A                                 23  3'F3-Exit'
     A                                      DSPATR(HI)
     A                                 22 30'绿屏菜单测试程序'
     A                                      COLOR(RED)
     A                                  8 36'      '
     A                                  9 36'      '
     A                                 10 36'      '
     A                                 11 36'      '
     A                                 12 36'      '
     A                                 13 36'      '
     A                                 14 36'      '
     A                                 15 36'      '
     A                                 16 36'      '
     A            MNUCHOICE      2Y 0H
     A                                  6 11'IIIIIIII'
     A                                      DSPATR(HI)
     A                                  7 11'IIIIIIII'
     A                                      DSPATR(HI)
     A                                  8 13'IIII'
     A                                      DSPATR(HI)
     A                                  9 13'IIII'
     A                                      DSPATR(HI)
     A                                 10 13'IIII'
     A                                      DSPATR(HI)
     A                                 11 13'IIII'
     A                                      DSPATR(HI)
     A                                 12 13'IIII'
     A                                      DSPATR(HI)
     A                                 13 13'IIII'
     A                                      DSPATR(HI)
     A                                 14 13'IIII'
     A                                      DSPATR(HI)
     A                                 15 13'IIII'
     A                                      DSPATR(HI)
     A                                 16 13'IIII'
     A                                      DSPATR(HI)
     A                                 17 11'IIIIIIII'
     A                                      DSPATR(HI)
     A                                 18 11'IIIIIIII'
     A                                      DSPATR(HI)
     A                                  6 30'PPPPPPPP'
     A                                      DSPATR(HI)
     A                                  7 30'PPPPPPPP'
     A                                      DSPATR(HI)
     A                                  8 32'PPPP'
     A                                      DSPATR(HI)
     A                                  9 32'PPPP'
     A                                      DSPATR(HI)
     A                                 10 32'PPPP'
     A                                      DSPATR(HI)
     A                                 11 32'PPPP'
     A                                      DSPATR(HI)
     A                                 12 32'PPPP'
     A                                      DSPATR(HI)
     A                                 13 32'PPPP'
     A                                      DSPATR(HI)
     A                                 14 32'PPPP'
     A                                      DSPATR(HI)
     A                                 15 32'PPPP'
     A                                      DSPATR(HI)
     A                                 16 32'PPPP'
     A                                      DSPATR(HI)
     A                                 17 30'PPPPPPPP'
     A                                      DSPATR(HI)
     A                                 18 30'PPPPPPPP'
     A                                      DSPATR(HI)
     A                                  8 39'PPPP '
     A                                      DSPATR(HI)
     A                                  9 41'PPPP '
     A                                      DSPATR(HI)
     A                                 10 42'PPPP'
     A                                      DSPATR(HI)
     A                                 11 40' PPPP'
     A                                      DSPATR(HI)
     A                                 12 38'PPPPP'
     A                                      DSPATR(HI)
     A                                 13 37'P'
     A                                      DSPATR(HI)
     A                                  6 60'SSSSS'
     A                                      DSPATR(HI)
     A                                  7 56'SSSSS'
     A                                      DSPATR(HI)
     A                                  7 64'SSSSS'
     A                                      DSPATR(HI)
     A                                  8 53'SSSS'
     A                                      DSPATR(HI)
     A                                  8 67'SSS'
     A                                      DSPATR(HI)
     A                                  9 52'SSSS'
     A                                      DSPATR(HI)
     A                                 10 53'SSSS'
     A                                      DSPATR(HI)
     A                                 11 56'SSSSS'
     A                                      DSPATR(HI)
     A                                 12 60'SSSSS'
     A                                      DSPATR(HI)
     A                                 13 64'SSSSS'
     A                                      DSPATR(HI)
     A                                 14 67'SSSS'
     A                                      DSPATR(HI)
     A                                 15 67'SSSS'
     A                                      DSPATR(HI)
     A                                 16 52'SSSS'
     A                                      DSPATR(HI)
     A                                 16 64'SSSS'
     A                                      DSPATR(HI)
     A                                 17 54'SSSSS'
     A                                      DSPATR(HI)
     A                                 17 62'SSSS'
     A                                      DSPATR(HI)
     A                                 18 58'SSSSS'
     A                                      DSPATR(HI)
     A                                 23 21'用户:'
     A                                 23 31USER
     A                                 23 43'日期:'
     A                                 23 53DATE(*SYS *Y)
     A                                      EDTCDE(Y)
     A                                 23 63'系统名:'
     A                                 23 74SYSNAME
     A          R MENUM1
     A                                      MNUBAR
     A            MNUCHOICE      2Y 0I  1  2
     A                                      MNUBARCHC(1 MENUP1 '作业')
     A                                      MNUBARCHC(2 MENUP2 '系统')
     A                                      MNUBARCHC(3 MENUP3 '操作员')
     A                                      MNUBARCHC(4 MENUP4 '设置')
     A                                      MNUBARSEP((*COLOR WHT)  +
     A                                      (*CHAR '.'))
     A          R MENUP1
     A                                      PULLDOWN
     A                                      WDWBORDER((*DSPATR  RI))
     A            JOBFLD         2Y 0I  1  2SNGCHCFLD(*AUTOENT *RSTCSR)
     A                                      CHOICE(1 '>W当前作业')
     A                                      CHOICE(2 '>S已提交作业')
     A                                      CHOICE(3 '>P假脱机文件')
     A                                      CHOICE(4 '>Q输出队列')
     A                                      CHOICE(5 '>A活动作业')
     A                                      CHOICE(6 '>S退出系统' *SPACEB)
     A          R MENUP2
     A                                      PULLDOWN
     A                                      WDWBORDER((*DSPATR  RI))
     A            SYSFLD         2Y 0I  1  2SNGCHCFLD(*AUTOENT)
     A                                      CHOICE(1 '>S 系统运行状态 ')
     A                                      CHOICE(2 '>D 硬盘工作状态')
     A                                      CHOICE(3 '>N 网络工作状态')
     A          R MENUP3
     A                                      PULLDOWN
     A                                      WDWBORDER((*DSPATR  RI))
     A            OPSFLD         2Y 0I  1  2SNGCHCFLD(*AUTOENT)
     A                                      CHOICE(1 '>O显示操作员消息')
     A                                      CHOICE(2 '>E命令行')
     A          R MENUP4
     A                                      PULLDOWN
     A                                      WDWBORDER((*DSPATR  RI))
     A            SETFLD         2Y 0I  1  2SNGCHCFLD(*AUTOENT)
     A                                      CHOICE(1 '>S系统设置')
     A                                      CHOICE(2 '>T网络设置')

最后,需要编一个 RPG 或 CLP 程序关联这个 DSPF ,下面这个例子是 RPG 程序的片段,通过 MNUCHOICE 来判断调用哪个菜单;通过 SYSFLD 来决定调用“系统”菜单中的哪个菜单项。

... ...
     C                   DOU        *In03 = *On
     C                   EXFMT     MENUR1
     C
     C                   If        *In03 = *Off
     C                   Select
     C                   When      MNUCHOICE = 1
     C                   Exsr      JOBMENU
     C                   When      MNUCHOICE = 2
     C                   Exsr      SYSMENU
     C                   When      MNUCHOICE= 3
     C                   Exsr      OPEMENU
     C                   When      MNUCHOICE = 4
     C                   Exsr      SETMENU
     C                   EndSL
     C
     C                   EndIf
     C                   Enddo
     C
     C                   Eval      *InLR = *On
     C                   RETURN
... ...
     C
     C     SysMenu       Begsr
     C
     C                   Read      MENUP2                               99
     C                   Select
     C                   When      SYSFLD = 1
     C                   Eval      @Command = @SysOpt1
     C                   When      SYSFLD = 2
     C                   Eval      @Command = @SysOpt2
     C                   When      SYSFLD = 3
     C                   Eval      @Command = @SysOpt3
     C                   EndSL
     C
     C                   Call      'QCMDEXC'
     C                   Parm                    @Command
     C                   Parm                    @CmdLen
     C
     C                   Endsr
... ...

最后,演示一下这个菜单界面程序的执行效果。

仅供参考

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

X社区推广