Как удалить предыдущее окно при отображении нового окна в AS400 - PullRequest
2 голосов
/ 06 марта 2019

Я пытаюсь отобразить окна из разных файлов отображения. Даже после предоставления RMVWDW, новое окно перекрывается с предыдущим окном. Работает ли RMVWDW, когда окна отображаются из нескольких отображаемых файлов? Как можно удалить предыдущее окно при отображении нового окна, когда окна отображаются из разных файлов отображения?

1 Ответ

5 голосов
/ 06 марта 2019

Итак, без лучшего описания проблемы, позвольте мне попытаться описать, что происходит. Я написал несколько минимальных программ, чтобы помочь.

Сначала у нас есть файл дисплея с просто полноэкранной записью и окном. Окно будет перекрывать полноэкранную запись.

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 Display

Пользователь нажимает ввод и вызывается 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.

Window 1 in DSPF2

Когда вы нажимаете ввод, вы получаете:

Window 2 in DSPF2

Введите еще раз, чтобы завершить обе программы.

Обратите внимание, что окно из DSPF1 не удаляется PGM2. Ключевое слово ASSUME сохраняет отображение от PGM1, пока DSPF2 открыт. DSPF1 приостанавливается, пока DSPF2 активен, поэтому вы не можете удалить это окно, пока DSPF2 активен, если не опустите ключевое слово ASSUME в DSPF2. Но если вы опустите ключевое слово ASSUME, при открытии DSPF2 весь экран стирается.

Полагаю, вы сможете удалить окно из DSPF1, если переписать экран без окна непосредственно перед вызовом программы 2, но вам придется установить DFRWRT(*NO) в DSPF1, иначе записи будет недостаточно для обновления экран.

...