LoadToolForm

From SunFlurry wiki
Jump to: navigation, search
  LoadToolForm (Загрузка модулей)
Объект:Функции общего назначения
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в строку или число, неверный путь, отсутствует заданная форма
Визуальность:Да

Функция работает только для визуальных клиентов и позволяет загружать произвольную форму в режиме инструментария или в режиме всплывающей подсказки. Формы в таком режиме не имеют модулей и работают в контексте текущего модуля, либо в контексте корневого модуля, в зависимости от параметров загрузки. Функция может возвратить серийный номер открытой формы, чтобы программа могла осуществлять переговоры с ней с помощью отсылки сообщений. Форма всегда загружается в свободном режиме (не модально), ей передаются два аргумента, которые возвратятся измененными в вызывавший модуль, если форма изменила их внутри визуального события OnOpen. Функция возвратится после полной инициализации формы, если загрузка удачна или после появления исключения, если она не удачна. Для клиентов, работающий с сервером базы данных, путь должен представлять собой серверный файловый путь (пример: Modules\FreeForms\Касса\Обработка доверенностей) или наименование объекта базы данных в виде <Тип объекта>.<Вид объекта> (пример Ref.Номенклатура), система преобразовывает его в соответствующий путь. Для клиентов работающих локально (без подключения к серверу базы данных), функция принимает абсолютный файловый путь.

Режим загрузки формы должен быть настроен в Студии, без соответствующего разрешения на загрузку, форма не будет загружена и будет создано исключение. Формы такого рода могут использоваться для создания резидентных областей экрана, где пользователь может осуществлять действия по редактированию данных или получению информации. К примеру, такая форма может представлять собой калькулятор или календарь, либо, к примеру, для рабочего места кассира можно расположить управление кассовым аппаратом в корневом потоке клиента, чтобы оно было доступно в любой момент работы пользователя. Возможность загрузки форме в режиме всплывающего окна, также делает возможным использование этой функции для загрузки окон типа "подсказка" со сложной информацией внутри или загрузки окон быстрого выбора информации (к примеру, календарь при выборе даты в поле редактирования). Формы, загружаемые в режиме инструментария могут "крепиться" к краям экрана для удобства работы пользователей. Также смотрите статью LoadModule

Загрузка формы в режиме инструментария проходит следующие этапы:

  • Если путь и наименование формы указаны корректно, произойдет загрузка формы и проверка доступности режима загрузки.
  • Создается новый дескриптор окна, в стек переменных помещаются переменные Param, Option и ModalResult, заполненные значениями аргументов.
  • Будет произведена попытка создания и начального заполнения формы с указанных именем. Если форма с таким именем в пути вызова функции отсутствует, будет вызвано исключение, загрузка будет отменена.
  • Происходит этап показа и выполнения формы:
    • Выводится на экран загруженная форма.
    • Происходит заполнение табличных элементов формы, полей, списков и прочего из базы данных. Вызываются визуальные события, типа OnInitLine и подобные.
    • Происходит вызов визуального события OnOpen, если оно задано на форме, шаблонах формы, закладках элементов формы. Данное событие, а также все события, вызываемые при начальном заполнении элементов формы, могут изменить переменные Param, Option и ModalResult, которые будут переданы назад в вызывавший модуль.
    • Происходит позиционирование на требуемом элементе таблицы выбора, если таковой задан.
    • Происходит заполнение из базы данных элементов формы, которые не были обновлены из-за их изменения внутри OnOpen и ранее из-за изменения их параметров и фильтров. Таким образом происходит оптимизация загрузки, чтобы элементы не обновлялись при загрузке более одного раза, замедляя загрузку и увеличивая нагрузку на базу данных. Кроме того, все созданные ранее асинхронные события и вызовы функций выполняются последовательно на этом этапе (система задерживает их выполнение до полной инициализации формы, так как они могут использовать загруженные формой данные).
    • Если внутри событий была вызвана функция закрытия формы Form.Close, форма закрывается. Иначе, управление отдается пользователю и форма ожидает от него команд, внешних прерываний, внешних сообщений или событий типа OnTimer. В этот момент устанавливается внутренний флаг окончания загрузки формы и функция Form.IsFullyInitialized будет возвращать 1.
    • Функция LoadToolForm возвращает управление модулю, который продолжает работу.

Синтаксис

LoadToolForm(<Способ вызова (INT)>,<Режим загрузки формы (INT)>,<Путь или имя базы данных (STRING)>,<Параметр>,<Опция>,<Имя формы (STRING)>="Form",<Серийный номер открытой формы (INT)>):<Результат, возвращенный при инициализации формы>

Аргументы

режим загрузки разрешается в студии.

  • <Способ вызова (INT)> - Способ вызова загружаемой формы. Возможны следующие значения:
    • 0 -- форма будет загружена, даже если такая же форма присутствует в контексте загрузки.
    • 1 -- форма будет загружена, только если она уже не существовала до этого.
  • <Режим загрузки формы (INT)> - Режим загрузки формы. Возможны следующие значения:
    • 0 -- форма загружается в режиме инструментария в корневой поток (резидентно). В этом режиме она будет видна и доступна из формы любого созданного потока. Форма может быть закрыта только когда пользователь пожелает ее закрыть.
    • 1 -- форма загружается в режиме инструментария в текущий поток (локально). В этом режиме она будет видна и доступна только для текущей формы и будет закрыта в момент, когда текущая форма будет закрыта.
    • 2 -- форма загружается в режиме всплывающего окошка (подсказки). Форма автоматически закрывается системой в момент, когда она теряет фокус. Такой режим удобен для показа форм быстрого редактирования полей и других элементов экранных форм.
  • <Путь или имя базы данных (STRING)> - Строковое представление данного аргумента может представлять собой путь к объекту базы данных, относительный путь к папке проекта на сервере, абсолютный путь к папке проекта на локальном компьютере. См. описание этой функции для более полной информации. Также можно указывать путь к внешнему объекту и путь внутри него (см. Имена файлов).
  • <Параметр>,<Опция> - (возможен аргумент-переменная (ByRef)) (необязательный аргумент) Аргументы передаются в вызываемую форму без изменения, и могут использоваться по усмотрению разработчика. Аргументы будут доступны при вызове визуальных событий инициализации элементов форм (к примеру OnInitLine) или в визуальном событии OnOpen под именами Param и Option.
  • <Имя формы (STRING)> - (необязательный аргумент) Имя загружаемой формы, если этот параметр не указан, будет использовано имя Form.
  • <Серийный номер открытой формы (INT)> - (возможен аргумент-переменная (ByRef)) Переменная, которая получит серийный номер созданной форме. Серийные номера используются в функциях работы с сообщениями (к примеру, SendMessageToForm).

Возвращаемое значение

Функция возвращает значение переменной ModalResult, которая доступна для изменения при инициализации открываемой формы.

Примеры

//Создается глобальное дополнительное окно с возможностью настроить кассовую машину
Сп:=List.Create();
Сп.SetByName("Параметр 1",аПараметр1);
Сп.SetByName("Параметр 2",аПараметр2);
LoadToolForm(1,1,"Modules\FreeForms\Касса\Настройка кассовой машины",Сп,0,"Form");