FORM_WINDOWS.LoadBlank


Синтаксис

PROCEDURE LoadBlank(Name: STRING[];
               [ AssignedName: STRING[] ]; [ ParentZone: FORM_ZONE ]
): FORM_WINDOW;

Описание

Метод загружает окно, имя которого указано в параметрах, до состояния окна-заготовки. Такое состояние диагностируется с помощью свойства FORM_WINDOW.Blank. Из состояния заготовки окно перейдет в рабочее состояние после выполнения FORM_WINDOWS.Load или при выполнении опции запуска видеопроцесса в этом окне. Т.о. FORM_WINDOWS.LoadBlank выполняет только первую часть работы метода FORM_WINDOWS.Load.

Основные этапы работы метода LoadBlank:

  1. Разыскивает окно с указанным именем среди открытых окон или в кэше окон. Если окно нашлось и оно полностью загружено, то LoadBlank() не переводит его в состояние "заготовка"
  2. Если окно там не нашлось, то
    1. считывает описание окна из WDO-файла
    2. создает дескрипторы зонных переменных
    3. удаляет видеозоны, не содержащие видеополей
    4. анализирует существование иерархической связи, если она указана в зоне
    5. окно получает статус "заготовка"

Параметр ParentZone - зона, которая станет родительской для данного окна. Пустое значение ParentZone означает, что загружается независимое окно. Непустое - грузится окно, зависимое к зоне ParentZone. Если параметр не указан, то в качестве его значения используется RTI.CurZone. Последующая опция запуска видеопроцесса может переподчинить это окно другой родительской зоне. Но данный метод не допускает переподчинения окна: если нужное окно уже открыто, и у него по факту другая порождающая зона, то выбрасывается экзотическое исключение 978 с текстом "переподчинение открытого окна %s: было %s; пытались загрузить, как %s". Влияние значения ParentZone:

  1. В событии OnInitializeWindow свойство FORM_WINDOW.ParentZone будет иметь именно это значение
  2. Загружаемое окно унаследует суффикс назначенного имени из родительского окна ParentZone.Window. Если этот суффикс не пуст, он автоматически добавится к AssignedName

Параметр AssignedName вместе с ParentZone определяют назначаемое имя. Если оно непустое, то параметр Name - универсальное имя окна. Сначала по назначаемому имени окно разыскивается среди загруженных окон, и если оно найдено метод возвращает ссылку именно на это окно. Иначе из Name будет получено оригинальное имя, использующееся для загрузки окна, а затем это окно получит назначаемое имя. Значение AssignedName от Name может отличаться только наличием суффикса, иначе выбрасывается исключение 978 с текстом "Оригинальное имя %s не совпадает с началом назначаемого имени %s".

Если AssignedName и ParentZone в итоге дают пустое назначаемое имя, то для поиска окна используется только параметр Name: сначала среди открытых на экране окон разыскивается окно с таким рабочим именем, если оно не нашлось, то среди уже загруженных окон разыскивается окно с таким назначаемым именем, а если и оно не нашлось, то Name - универсальное имя окна.

Если нужное окно уже открыто, метод не станет перезагружать его, даже если изменился образ на диске. Если окно ранее не было загружено, оно загрузится и станет невидимым, при этом нумерация окон в коллекции изменится. Если загрузить окно не удалось, метод выбросит исключение 883.

Имя окна считается регистрозависимым. При первой загрузке окна его оригинальное имя, а если указано, то и назначаемое, сохраняются в окне в том регистре, в котором они указаны в параметрах данного метода (или в параметре опции запуска видеопроцессов, если окно впервые загружалось именно так). Если при повторной загрузке окна его оригинальное или назначаемое имя указано в другом регистре, то данный метод в домашнем домене выбрасывает исключение 965. В чужом домене на время переходного периода - только предупреждение в ECN. Требование регистрозависимости имен окна связано с тем, что регистрозависимыми являются имена контекстов, а имя окна может быть частью имени контекста. Имена окон часто применяются в формировании имен процедур ASL-языка, а эти имена регистрозависимые.

Если требуется загрузить окно с оригинальным именем W и назначаемым именем F, а окно с назначаемым именем F уже загружено, но оно имеет другое оригинальное имя, причем отличающееся не только регистром, то выбрасывается исключение 966.

Если нужное окно уже было загружено, и для него не выполнялся метод FORM_WINDOW.Hide, то выполняется проверка и при необходимости перезагрузка окна из WDO-файла. Затем в окне в любом случае выставляется признак "не проверять соответствие диску при открытии окна". Это означает, что при открытии окна для запуска процесса в нем не будет проверяться требование перезагрузки окна. В противном случае были бы проигнорированы последующие за LoadBlank() программные доработки окна. Стоит отметить особо: любой экземпляр окна при создании наследует этот признак из окна-оригинала. Т.о. после вызова данного метода для окна-оригинала видео-процесс в его клоне не приведет к перезагрузке окна. В отличии от данного метода FORM_WINDOWS.Item() такой признак не выставляет. Открытие окна при запуске видео-процесса без предварительного выполнения данного метода соответствие диску проверяет.

Метод появился в V14.131.010