如何在RPGLE中实现屏幕左右滚动及右侧添加更多字段?
RPGLE屏幕右侧加字段问题与左右滚动实现方案
一、右侧添加字段的问题解决
- 检查屏幕文件的记录格式定义:新增字段的ROW/COL坐标得设对,别超出终端最大列数(默认一般80列,宽屏终端可改成132列)。比如DDS里这么定义:
A FLD01 10A B 5 50 A FLD02 10A B 5 65
- 确认屏幕缓冲区大小:要是用固定缓冲区,得保证能装下新增字段的数据,不然会溢出导致字段不显示或报错。去RPGLE程序里核对下对应数据结构的长度是否匹配。
- 排查字段重叠:新增字段别和已有字段坐标重叠,不然会被覆盖或者显示异常。可以用
WRKDSNF命令打开DDS文件可视化检查布局。
二、实现屏幕左右滚动的两种方法
方法1:用系统自带滚动(适配宽屏终端)
- 先把终端调成宽屏模式(比如132列),通过终端仿真软件设置(比如IBM i Access Client Solutions的终端配置)。
- DDS里的记录格式如果没特殊限制,当字段总宽度超过当前显示列数时,终端会自动支持左右滚动,一般用Shift+左右箭头或者终端专用滚动键操作。
方法2:自定义滚动逻辑(适合80列固定终端)
- 分页面切换:定义两个记录格式,一个存左侧字段,一个存右侧字段,用功能键切换显示:
- DDS里定义
MAIN_LEFT和MAIN_RIGHT两个记录格式,分别放左右字段组。 - RPGLE里监控功能键输入,切换显示对应格式,代码片段:
- DDS里定义
C EXFMT MAIN_LEFT C IF *IN03 = '1' // 假设F3返回,F8切到右侧 C EXFMT MAIN_RIGHT C ENDIF
- 动态偏移坐标:定义偏移变量,按滚动键时调整偏移量,刷新屏幕时用偏移后的坐标显示字段:
D colOffset S 3P 0 INZ(0) C WHEN *IN10 = '1' // F10左滚 C EVAL colOffset = colOffset - 5 C WHEN *IN11 = '1' // F11右滚 C EVAL colOffset = colOffset + 5 C // 限制偏移范围,避免字段出界 C IF colOffset < 0 C EVAL colOffset = 0 C ENDIF C EXFMT MAIN_SCREEN
DDS里用表达式设置动态坐标:
A FLD01 10A B 5 (50 + colOffset)
内容的提问来源于stack exchange,提问作者Aditya Kumar
相关产品推荐
相关产品推荐

