Xiao Qing
作者Xiao Qing2022-07-04 14:58
系统工程师, 浪潮商用机器有限公司

如何在IBM i 绿屏方式下实现GUI的按钮功能

字数 4061阅读 4459评论 2赞 3

大家知道 IBM i 的操作界面主要是绿屏方式,用起来简单快捷、稳定可靠。绿屏方式不仅可以进行文字显示, IBM i 还提供了 GUI 控件来实现图形界面的一些功能,例如可以实现“按钮”、“下拉菜单”、“滚动列表”等功能,这对于三四十年前没有图形显示的文字终端来说非常有意义,至今宝刀不老依然发挥着重要作用。

为了更好地说明 GUI 控件,下面举一个例子来简单地说明如何在 IBM i 绿屏方式下实现 GUI 的“按钮”功能。

  1. 创建 DSPF 。
    可以用 DDS 或 SDA 来定义。

      A*%%TS  SD  20220602  230157  XIAOQING    REL-V7R2M0  5770-WDS
      A*%%EC
      A************************************************************
      A*                                                                                 *
      A*  DISPLAY FILE                                                        *
      A*                                                                                  *
      A*  EDITED BY XIAOQING,2022/6                              *
      A*                                                                                  *
      A************************************************************
      A                                      DSPSIZ(24 80 *DS3)
      A                                      MSGLOC(24)
      A                                      PRINT
      A          R DSPDTA01
      A*%%TS  SD  20220602  230157  XIAOQING    REL-V7R2M0  5770-WDS
      A                                      TEXT('报表屏幕 01')
      A                                      CF03(03 '退出 ')
      A                                      SETOF(99)
      A                                      BLINK
      A
      A                                  2  2'USER:'
      A                                  2  8USER
      A                                  2 34'SYSTEM:'
      A                                  2 42SYSNAME
      A                                  2 70DATE(*SYS) EDTCDE(Y)
      A                                  1 32'按钮测试画面'
      A                                      DSPATR(HI)
      A                                      COLOR(YLW)
      A                                  4  2'说明:'
      A                                  5  2' OK或F01按钮被按下时,开始计数-
      A                                      。'
      A                                  8  2'按下OK键的次数统计...'
      A                                 10  2'按下F01键的次数统计...'
      A            COUNTOK        3Y 0B  8 37
      A            COUNTF01       3Y 0B 10 37
      A            PSHFLD         2Y 0B  8 45PSHBTNFLD(*RSTCSR (*NUMCOL 3))
      A                                      PSHBTNCHC(1 'OK')
      A            PSHF01         2Y 0B 10 45PSHBTNFLD(*RSTCSR (*NUMCOL 3))
      A                                      PSHBTNCHC(1 'F01' CF01)
      A            DSPMSG        40A  O 20  4DSPATR(HI)
      A                                 23  2'F3 EXIT'
      A                                      COLOR(RED)
    

    之后对这个 DSPF 进行测试。

  2. 编写一个 CLP 来调用这个 DSPF 。
    这个 CLP 程序的作用是对按钮的点击次数进行统计,也可以通过“ Reset All ”按钮对统计结果清零。例如“ OK ”按钮每被点击一次,计数器就会累计一次,同时在屏幕上进行显示,大家可以通过下面的视频查看程序的执行效果。

    /********************************************************************/
    /*  CREATE A BUTTON ON DISPLAY FILE AND TEST       */
    /*  CONTROL LANGUAGE PROGRAM                                */
    /*                                                                                            */
    /*  EDITED BY XIAOQING 2022/06                                      */
    /********************************************************************/
              PGM
              DCL        VAR(&MSG)      TYPE(*CHAR) LEN(80)
              DCLF       FILE(XQLIB/BUTTONF)
     
              CHGVAR     VAR(&COUNTOK) VALUE(0)
              CHGVAR     VAR(&COUNTF01) VALUE(0)
     DSPLY:      SNDRCVF    RCDFMT(DSPDTA01)
              IF         COND(&IN03 *EQ '1') THEN(RETURN)
              IF         COND(&PSHF01 *EQ 1) THEN(DO)
              CHGVAR     VAR(&DSPMSG) VALUE('F01  按钮被按下 ')
              CHGVAR     VAR(&COUNTF01) VALUE(&COUNTF01 + 1)
              ENDDO
              ELSE       IF COND(&PSHFLD *EQ 1) THEN(DO)
              CHGVAR     VAR(&DSPMSG) VALUE('OK  按钮被按下 ')
              CHGVAR     VAR(&COUNTOK) VALUE(&COUNTOK + 1)
              ENDDO
              GOTO       DSPLY
              RETURN
     
     ERROR:      RCVMSG     RMV(*NO) MSG(&MSG)
     SNDMSG:     SNDPGMMSG  MSG(&MSG) MSGTYPE(*DIAG)
              ENDPGM
    1. 执行这个程序
      call xqlib/buttonclp


    大家可以从上面的例子看到,在 AS/400 绿屏方式下通过了 GUI 控件实现按钮功能比较容易,不需要编写大段的代码。后面有机会还将介绍“下拉菜单”、“下拉列表”等 GUI 界面的实现方法。

仅供参考。

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

3

添加新评论2 条评论

Xiao QingXiao Qing系统工程师, 浪潮商用机器有限公司
2022-07-12 11:37
感谢qingzhou
qingzhouqingzhou系统架构师, IPACS Co.,Ltd.
2022-07-07 19:06
挺好的!以前也弄过一个“下拉式”菜单,支持鼠标点击操作,感觉很好玩!
Ctrl+Enter 发表

作者其他文章

相关文章

X社区推广