“如何在 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 菜单功能。
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 条评论