Итак, без лучшего описания проблемы, позвольте мне попытаться описать, что происходит. Я написал несколько минимальных программ, чтобы помочь.
Сначала у нас есть файл дисплея с просто полноэкранной записью и окном. Окно будет перекрывать полноэкранную запись.
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, и ожидает нажатия клавиши управления. Обратите внимание на обе записи на дисплее.
Пользователь нажимает ввод и вызывается 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.
Когда вы нажимаете ввод, вы получаете:
Введите еще раз, чтобы завершить обе программы.
Обратите внимание, что окно из DSPF1 не удаляется PGM2. Ключевое слово ASSUME сохраняет отображение от PGM1, пока DSPF2 открыт. DSPF1 приостанавливается, пока DSPF2 активен, поэтому вы не можете удалить это окно, пока DSPF2 активен, если не опустите ключевое слово ASSUME в DSPF2. Но если вы опустите ключевое слово ASSUME, при открытии DSPF2 весь экран стирается.
Полагаю, вы сможете удалить окно из DSPF1, если переписать экран без окна непосредственно перед вызовом программы 2, но вам придется установить DFRWRT(*NO)
в DSPF1, иначе записи будет недостаточно для обновления экран.