You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<TDwidth="50%">Возвращает или задает код для выполнения при отпускании кнопки мыши, когда указатель мыши находится на элементе.</TD></TR></TBODY></TABLE></DIV></DIV></BODY></HTML>
36
+
<TDwidth="50%">Возвращает или задает код для выполнения при отпускании кнопки мыши, когда указатель мыши находится на элементе.</TD></TR>
<TDwidth="50%">Возвращает или задает код, указывающий на обработчик события при получении свойства объекта формы методом <B>ДекларативныеФормы.ПолучитьСвойство (DeclarativeForms.GetObjectProperty)</B>.</TD></TR></TBODY></TABLE></DIV></DIV></BODY></HTML>
<P>Создать элемент можно разными способами. Поддерживаются <B>HTML</B> тэги соответствующие элементу, но только для класса <B>Элемент</B>, так как он является базовым
87
-
классом.</P>
88
-
<PREclass=code>
89
-
Кнопка1 = ДФ.Кнопка();
90
-
Кнопка2 = ДФ.Элемент("Кнопка");
91
-
Кнопка3 = ДФ.Элемент("button");
92
-
Абзац1 = ДФ.Элемент("p");
93
-
Диалог1 = ДФ.Элемент("dialog");
94
-
</PRE>
95
-
<P></P>
96
-
<br>
97
84
<H3class=dtH3>Подключение библиотеки и создание объекта ДекларативныеФормы.</H3>
<P>Избежать появление окна консоли совсем поможет разработка <Ahref="https://github.com/ahyahy/OneScriptNoConsole" target="_blank">Запуск сценариев OneScript без окна консоли</A>.</P>
120
107
<P></P>
121
-
<P></P>
122
-
<P></P>
123
-
<P></P>
124
-
<P></P>
108
+
<br>
109
+
<H3class=dtH3>Как происходит обработка событий.</H3>
110
+
<br>
111
+
<P>Декларативные формы выполнены в парадигме событийно-ориентированного программирования. С одной стороны у нас движок <B>NW.JS</B>, который по нашему плану
112
+
создал окно с движком браузера <B>Chromium</B> в пределах окна. С другой стороны сценарий, работающий на движке <B>OneScript</B>. Связь между ними происходит
113
+
посредством <B>TCP сервера</B>, запущенного фоновым процессом из сценария. При возникновении в форме события выполняется соответствующая функция из
114
+
скрипта <B>main.js</B>. Функция формирует <B>HTTP-запрос</B> для <B>TCP сервера</B>. <B>TCP сервер</B> анализирует этот запрос, находит указанный
115
+
обработчик в сценарии и выполняет его. Затем высылает клиенту ответ. В этом ответе в виде строки собраны все действия возникшие во время выполнения обработчика.
116
+
Действия эти представлены именами функций с параметрами. Функции разделены точкой с запятой. Получив в ответ на <B>HTTP-запрос</B> строку с перечнем функций
117
+
скрипт <B>main.js</B> выполняет их, что вызывает изменения в форме.</P>
118
+
<P>Строка ответа сервера может быть просмотрена в любое время, она доступна в свойстве
119
+
<B>ДекларативныеФормы.СтрокаФункций (DeclarativeForms.FunctionString)</B>. И её можно изменить, повлияв на ответ сервера по своему усмотрению.</P>
120
+
<P>Из всего этого ясно, что изменять форму в ответ на возникающие события мы можем только во время выполнения <B>HTTP-запроса</B>. Первый такой запрос
121
+
производится при выполнении метода <B>Форма.Открыть (Form.Open)</B>. До его запуска идет код создания объектов формы, задания свойств. Эти действия
122
+
записываются в свойство <B>ДекларативныеФормы.СтрокаФункций (DeclarativeForms.FunctionString)</B>. С запуском метода <B>Форма.Открыть (Form.Open)</B>
123
+
<B>NW.JS</B> формирует окно и срабатывает событие загрузки страницы <B>index.html</B>. В этом событии посылается первый запрос на сервер. Сервер в ответе высылает
124
+
строку <B>ДекларативныеФормы.СтрокаФункций (DeclarativeForms.FunctionString)</B> функции из которой выполняются друг за другом. Создаются объекты формы и
125
+
устанавливаются их свойства.</P>
126
+
<P>Мы обходимся без веб-сервера, но при этом не можем изменять состояние формы непосредственно при каждом атомарном изменении свойств объектов в сценарии.
127
+
Можно только пакетом получить сделанные изменения и только в пределах выполнения обработчика события. Сервер закрывает соединение после отсылки ответа
128
+
клиенту, иначе <B>HTTP-запрос</B> не будет получен клиентом. Было бы лучше иметь возможность влиять на состояние формы
129
+
не только при обработке события, но и в произвольном месте сценария. Для этого средствами <B>NW.JS</B> в файле <B>main.js</B> создается <B>TCP клиент</B>.
130
+
Он подключается к серверу и создает постоянный канал связи. При случайном или намеренном разрыве канал восстанавливается. По нему можно так же посылать
131
+
форме имена функций с параметрами и делать это можно не в пределах обработчика события. Клиент будет доступен как <B>ДФ.ОбщаяСтруктура.Клиент</B>.
<P>И клиент и переменная <B>КС</B> - это объекты библиотеки <B>OneScriptClientServer.dll</B>. Они доступны вот просто так сразу, без
143
+
дополнительных объявлений во всех подключенных сценариях. Как это достигается Вы можете узнать ознакомившись с моей разработкой
144
+
<Ahref="https://github.com/ahyahy/OneScriptIntegrator" target="_blank">Эффективное взаимодействия между сценариями проекта...</A>.</P>
145
+
<P> Есть ограничение - такое возможно только после выполнения метода <B>Форма.Открыть (Form.Open)</B>, потому что <B>ДФ.ОбщаяСтруктура.Клиент</B> и
146
+
<B>ДФ.ОбщаяСтруктура.КС</B> доступны только после первого <B>HTTP-запроса</B> от загруженной формы.</P>
147
+
<P>Так как <B>TCP сервер</B> многопоточный выполнение событий будет происходить не в линейном порядке отправки <B>HTTP-запросов</B>.
148
+
Оно будет зависеть от алгоритма работы сервера и выполнение строгой очередности здесь не наблюдается.</P>
0 commit comments