在AS400中显示新窗口时如何删除上一个窗口

Sus*_*tha 2 ibm-midrange

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

jma*_*phy 5

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

首先,我们有一个仅包含全屏​​记录的显示文件和一个窗口。该窗口将覆盖全屏记录。

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'
Run Code Online (Sandbox Code Playgroud)

相关程序PGM1

**free
dcl-f dspf1    workstn;

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

write record1;
exfmt w01;

pgm2();

*inlr = *On;
return;
Run Code Online (Sandbox Code Playgroud)

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

PGM1显示

用户按下Enter键,并调用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' '
Run Code Online (Sandbox Code Playgroud)

DSPF2的程序是PGM2。

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

exfmt w02;

exfmt w03;

*inlr = *On;
return;
Run Code Online (Sandbox Code Playgroud)

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

DSPF2中的窗口1

当您按Enter键时,您将获得:

DSPF2中的窗口2

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

请注意,PGM2不会删除DSPF1中的窗口。当DSPF2打开时,ASSUME关键字可使显示保持与PGM1无关。DSPF2处于活动状态时,DSPF1被挂起,因此,除非您从DSPF2省略了ASSUME关键字,否则您不能在DSPF2处于活动状态时删除该窗口。但是,如果省略ASSUME关键字,则在打开DSPF2时会删除整个显示。

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