Skip to content

Commit 4ac4e1a

Browse files
committed
справка
1 parent 28cdb4b commit 4ac4e1a

File tree

1,192 files changed

+63717
-4658
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,192 files changed

+63717
-4658
lines changed

docs/OSDFormsRu/Enumerations.html

+205-1
Large diffs are not rendered by default.

docs/OSDFormsRu/Events.html

+4-1
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,7 @@ <H3 class=dtH3>События</H3>
3333
<TD width="50%">Возвращает или задает код для выполнения при нажатии элемента управления.</TD></TR>
3434
<TR vAlign=top>
3535
<TD width="50%"><A href="OSDForms.ElementMouseUpEvent.html">ПриОтпусканииМыши&nbsp;(MouseUp) (Элемент)</A></TD>
36-
<TD width="50%">Возвращает или задает код для выполнения при отпускании кнопки мыши, когда указатель мыши находится на элементе.</TD></TR></TBODY></TABLE></DIV></DIV></BODY></HTML>
36+
<TD width="50%">Возвращает или задает код для выполнения при отпускании кнопки мыши, когда указатель мыши находится на элементе.</TD></TR>
37+
<TR vAlign=top>
38+
<TD width="50%"><A href="OSDForms.DeclarativeFormsGettingPropertyEvent.html">ПриПолученииСвойства&nbsp;(GettingProperty) (ДекларативныеФормы)</A></TD>
39+
<TD width="50%">Возвращает или задает код, указывающий на обработчик события при получении свойства объекта формы методом <B>ДекларативныеФормы.ПолучитьСвойство&nbsp;(DeclarativeForms.GetObjectProperty)</B>.</TD></TR></TBODY></TABLE></DIV></DIV></BODY></HTML>

docs/OSDFormsRu/Intro.html

+41-17
Original file line numberDiff line numberDiff line change
@@ -81,19 +81,6 @@ <H3 class=dtH3>Требования к каталогу Вашей програ
8181
<IMG src="Intro3.jpg"></IMG>
8282
<P></P>
8383
<br>
84-
<H3 class=dtH3>Конструкторы экземпляров класса.</H3>
85-
<br>
86-
<P>Создать элемент можно разными способами. Поддерживаются <B>HTML</B> тэги соответствующие элементу, но только для класса <B>Элемент</B>, так как он является базовым
87-
классом.</P>
88-
<PRE class=code>
89-
Кнопка1 = ДФ.Кнопка();
90-
Кнопка2 = ДФ.Элемент("Кнопка");
91-
Кнопка3 = ДФ.Элемент("button");
92-
Абзац1 = ДФ.Элемент("p");
93-
Диалог1 = ДФ.Элемент("dialog");
94-
</PRE>
95-
<P></P>
96-
<br>
9784
<H3 class=dtH3>Подключение библиотеки и создание объекта ДекларативныеФормы.</H3>
9885
<br>
9986
<P>Подключить библиотеку можно так:</P>
@@ -118,10 +105,47 @@ <H3 class=dtH3>Закрытие программы.</H3>
118105
после закрытия окна программы.</P>
119106
<P>Избежать появление окна консоли совсем поможет разработка <A href="https://github.com/ahyahy/OneScriptNoConsole" target="_blank">Запуск сценариев OneScript без окна консоли</A>.</P>
120107
<P></P>
121-
<P></P>
122-
<P></P>
123-
<P></P>
124-
<P></P>
108+
<br>
109+
<H3 class=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>ДекларативныеФормы.СтрокаФункций&nbsp;(DeclarativeForms.FunctionString)</B>. И её можно изменить, повлияв на ответ сервера по своему усмотрению.</P>
120+
<P>Из всего этого ясно, что изменять форму в ответ на возникающие события мы можем только во время выполнения <B>HTTP-запроса</B>. Первый такой запрос
121+
производится при выполнении метода <B>Форма.Открыть&nbsp;(Form.Open)</B>. До его запуска идет код создания объектов формы, задания свойств. Эти действия
122+
записываются в свойство <B>ДекларативныеФормы.СтрокаФункций&nbsp;(DeclarativeForms.FunctionString)</B>. С запуском метода <B>Форма.Открыть&nbsp;(Form.Open)</B>
123+
<B>NW.JS</B> формирует окно и срабатывает событие загрузки страницы <B>index.html</B>. В этом событии посылается первый запрос на сервер. Сервер в ответе высылает
124+
строку <B>ДекларативныеФормы.СтрокаФункций&nbsp;(DeclarativeForms.FunctionString)</B> функции из которой выполняются друг за другом. Создаются объекты формы и
125+
устанавливаются их свойства.</P>
126+
<P>Мы обходимся без веб-сервера, но при этом не можем изменять состояние формы непосредственно при каждом атомарном изменении свойств объектов в сценарии.
127+
Можно только пакетом получить сделанные изменения и только в пределах выполнения обработчика события. Сервер закрывает соединение после отсылки ответа
128+
клиенту, иначе <B>HTTP-запрос</B> не будет получен клиентом. Было бы лучше иметь возможность влиять на состояние формы
129+
не только при обработке события, но и в произвольном месте сценария. Для этого средствами <B>NW.JS</B> в файле <B>main.js</B> создается <B>TCP&nbsp;клиент</B>.
130+
Он подключается к серверу и создает постоянный канал связи. При случайном или намеренном разрыве канал восстанавливается. По нему можно так же посылать
131+
форме имена функций с параметрами и делать это можно не в пределах обработчика события. Клиент будет доступен как <B>ДФ.ОбщаяСтруктура.Клиент</B>.
132+
<PRE class=code>
133+
ДФ.ОбщаяСтруктура.Клиент.ОтправитьСообщение(ДФ.ОбщаяСтруктура.КС.СообщениеТекст(
134+
";setAttribute('" + Кнопка2.Имя + "', '" + "backgroundColor" + "', '" + "rgb(255, 255, 0)" + "')"));
135+
136+
или так:
137+
138+
Кнопка2.ЦветФона = ДФ.Цвет.Красный;
139+
ДФ.ОбщаяСтруктура.Клиент.ОтправитьСообщение(ДФ.ОбщаяСтруктура.КС.СообщениеТекст(ДФ.СтрокаФункций));
140+
</PRE>
141+
</P>
142+
<P>И клиент и переменная <B>КС</B> - это объекты библиотеки <B>OneScriptClientServer.dll</B>. Они доступны вот просто так сразу, без
143+
дополнительных объявлений во всех подключенных сценариях. Как это достигается Вы можете узнать ознакомившись с моей разработкой
144+
<A href="https://github.com/ahyahy/OneScriptIntegrator" target="_blank">Эффективное взаимодействия между сценариями проекта...</A>.</P>
145+
<P> Есть ограничение - такое возможно только после выполнения метода <B>Форма.Открыть&nbsp;(Form.Open)</B>, потому что <B>ДФ.ОбщаяСтруктура.Клиент</B> и
146+
<B>ДФ.ОбщаяСтруктура.КС</B> доступны только после первого <B>HTTP-запроса</B> от загруженной формы.</P>
147+
<P>Так как <B>TCP сервер</B> многопоточный выполнение событий будет происходить не в линейном порядке отправки <B>HTTP-запросов</B>.
148+
Оно будет зависеть от алгоритма работы сервера и выполнение строгой очередности здесь не наблюдается.</P>
125149
<P></P>
126150
<P></P>
127151
<br>

0 commit comments

Comments
 (0)