Difference between revisions of "LoadToolForm"
m (1 revision imported) |
|
(No difference)
|
Revision as of 07:51, 7 February 2021
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");