FORM_ZONE.OnSetSubwindow


Синтаксис

PROPERTY [RW, NE] OnSetSubwindow: SCAL[2];

Описание

Разрешение вызова программного события "назначение имени подчиненного окна" для данной зоны. Значение по умолчанию определяется в WED установкой флажков в разделе "Subwindow-Manual choose" в описании свойств зоны. Данное свойство объединяет все эти четыре флажка:

Таблица соответствия флажков в WED и выполняющегося в панели подчиненного окна процесса, RTI.StartMode в каждом из этих случаев принимает специфическое значение
Признак в разделе Subwindow-Manual choose свойств зоны Опция процесса подчиненного окна Значение RTI.StartMode на старте программы
Edit Edit 10
Insert Ins 11
Delete Del 12
ShowWin ShowWin 13

Непрерываемое, настраивающее режим видеопроцесса, имеющее на старте позицию RTI.CurZone (кроме интерактивной вставки) программное событие уровня зоны,  OnSetSubwindow вызывается  в порождающей зоне при работе процессов Edit, Ins, Del, ShowWin в панели подчиненного окна:

  1. на старте процессов
  2. если в порождающей зоне установлен флаг FORM_ZONE.HasVariousSubwindows
    1. при смене текущей позиции в порождающей зоне и, как следствие, в панели подчиненного окна (начиная с V14.152.040)
    2. если текущая позиция в порождающей зоне не изменилась, но изменились значения полей текущей записи, и эта запись не редактируется интерактивно в окнах собственного подключения (начиная с V14.190.060)

Особенности такой программы:

  1. RTI.CurZone, RTI.CurWindow - соответственно порождающая зона и окно. RTI.CurProcess - процесс в панели подчиненного окна (если имя подчиненного окна будет пустым, то процесс будет работать прямо в порождающей зоне). RTI.Env - переменные окружения нового процесса.
  2. Если событие вызвано на старте процесса, то к этому моменту новый процесс уже выполняется, но он пока не связан ни с какой зоной окна. Поэтому RTI.CurProcess.Zone здесь имеет пустое значение.
  3. Событие выполняется на транзакции (стартующего) процесса подчиненного окна. Если это ShowWin, и в вышестоящих зонах не ведется редактирование, то событие выполняется на видеосистемной транзакции.
  4. Главная задача программы - для исходной зоны RTI.CurZone назначить имя подчиненного окна с помощью свойства FORM_ZONE.SubwindowOriginalName. Если стартует новый процесс, он запустится в панели этого окна. Если данное событие вызвано из-за смены позиции в панели подчиненного окна (в порождающей зоне выставлен флаг FORM_ZONE.HasVariousSubwindows), и значение FORM_ZONE.SubwindowOriginalName порождающей зоны перестало совпадать с оригинальным именем подчиненного окна, то в подчиненном окне выставляется требование подмены (аналог метода FORM_WINDOW.Interchange) и процесс рестартует в панели окна FORM_ZONE.SubwindowOriginalName.
  5. После завершения данной программы стартующий (рестартующий, если окно подменилось) процесс пытается связаться с панелью назначенного подчиненного окна
    1. Если в целевой зоне нет процессов, то новый процесс связывается с этой зоной и продолжает выполнение
    2. Если в целевой зоне уже есть процесс редактирования, то выдается сообщение с предложением переключиться в это окно. В любом случае новый процесс завершается, что сопровождается сбросом очереди команд.
    3. Если новый процесс - это ShowWin, а в целевой зоне процесс ShowWin уже выполняется, то прежний ShowWin молча подменяется на новый (точнее у прежнего подменяются переменные окружения)

До версии 14.144.010 данное программное событие выполнялось до старта нового процесса на транзакции исходной зоны.

Свойство добавлено в V14.152.040.