首页 > 解决方案 > 在 AS400 中显示新窗口时如何删除上一个窗口

问题描述

我正在尝试从不同的显示文件显示窗口。即使在提供 RMVWDW 之后,新窗口也会与前一个窗口重叠。当从多个显示文件显示窗口时,RMVWDW 是否工作?当从不同的显示文件显示窗口时,在显示新窗口时删除前一个窗口的解决方案是什么?

标签: ibm-midrange

解决方案


因此,在没有更好地描述问题的情况下,让我尝试描述正在发生的事情。我写了一些最小的程序来提供帮助。

首先,我们有一个显示文件,其中只有一个全屏记录和一个窗口。该窗口将覆盖全屏记录。

DSPF1

 A          R RECORD1
 A                                  3 19'Base display record'
 A                                 20 18'Base Display Record'
 A          R W01                       WINDOW(7 15 10 50)
 A                                  5 14'Window in DSPF1'

相关程序 PGM1

**free
dcl-f dspf1    workstn;

dcl-pr pgm2 ExtPgm('PGM2');
end-pr;

write record1;
exfmt w01;

pgm2();

*inlr = *On;
return;

同时显示记录 1 和 w01,并等待按下命令键。注意显示屏上的两条记录。

PGM1 显示器

用户按下回车键并调用 PGM2。以下是显示文件和程序的来源。注意显示文件源中的 ASSUME 关键字。这可以防止在打开此显示文件时从显示中删除以前的显示文件。

DSPF2

 A          R W02                       WINDOW(9 20 10 50)
 A                                      RMVWDW
 A                                  5 14'Window 1 from DSPF2'
 A          R W03                       WINDOW(4 5 10 50)
 A                                      RMVWDW
 A                                  5 14'Window 2 from DSPF2'
 A          R DUMMY                     ASSUME
 A                                      OVERLAY
 A                                  1  2' '

DSPF2 的程序是 PGM2。

**free
dcl-f dspf2   workstn ignore(dummy);

exfmt w02;

exfmt w03;

*inlr = *On;
return;

这将在 DSPF2 中显示第一个窗口,等待命令键按下,然后从 DSPF2 中删除第一个窗口并显示 DSPF2 中的第二个窗口。

DSPF2 中的窗口 1

当你按下回车时,你会得到:

DSPF2 中的窗口 2

再次输入结束这两个程序。

请注意,来自 DSPF1 的窗口不会被 PGM2 删除。ASSUME 关键字在 DSPF2 打开时保持 PGM1 的显示。DSPF1 在 DSPF2 处于活动状态时暂停,因此您不能在 DSPF2 处于活动状态时删除该窗口,除非您从 DSPF2 中省略 ASSUME 关键字。但是如果你省略了 ASSUME 关键字,当 DSPF2 打开时,整个显示将被删除。

我想如果您在调用程序 2 之前重写没有窗口的屏幕,您可能能够从 DSPF1 中删除窗口,但是您必须DFRWRT(*NO)在 DSPF1 上进行设置,否则写入将不足以更新屏幕。


推荐阅读