<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=5564&amp;type=atom" />
	<updated>2021-05-20T14:08:25Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=5564</id>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=148013#p148013" />
			<content type="html"><![CDATA[<p>Переписал библиотеку OneScriptForms для работы с формами для сценарного языка OneScript. Можно написать полноценное приложение. Кроме визуальных элементов управления есть различные коллекции, таймер, наблюдатель файловой системы, работа с кодировками, изображениями, цветом, звуком, имитация нажатий клавиш, программное управление мышью, таблицы и ещё много чего. Написана на C#, исходники лежат на <a href="https://github.com/ahyahy/OneScriptForms">https://github.com/ahyahy/OneScriptForms</a>. Сайт здесь: <a href="https://ahyahy.github.io/OneScriptForms/">https://ahyahy.github.io/OneScriptForms/</a>.</p>]]></content>
			<author>
				<name><![CDATA[ahyahy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33499</uri>
			</author>
			<updated>2021-05-20T14:08:25Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=148013#p148013</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=136748#p136748" />
			<content type="html"><![CDATA[<p>Для OneScript есть библиотека для создания gui. Кому интересно приходите на <a href="https://onescriptgui.teriy.com">https://onescriptgui.teriy.com</a>.<br />Только что закончил. Скриптим на русском, создаём формы на русском. Справка подробная, все свойства и методы с примерами.<br />Используется библиотека KiXforms.NET v3.2.16.0 написанная Shawn Tassie.</p>]]></content>
			<author>
				<name><![CDATA[ahyahy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33499</uri>
			</author>
			<updated>2019-12-03T14:31:38Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=136748#p136748</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=100572#p100572" />
			<content type="html"><![CDATA[<p>Одна из реализаций применения KiXforms для 1Script с примерами и русской справкой по адресу https://bitbucket.org/ahyahy/gui-1script/src<br />Так сказать проба пера. Может пригодится. Над справкой работаю, русификация, подробные примеры и т.п.</p>]]></content>
			<author>
				<name><![CDATA[ahyahy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33499</uri>
			</author>
			<updated>2016-01-21T08:00:38Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=100572#p100572</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=92406#p92406" />
			<content type="html"><![CDATA[<p>уважаемый&nbsp; wisgest!<br />теперь все работает!<br />тысячи благодарностей и наилучших пожеланий!</p>]]></content>
			<author>
				<name><![CDATA[index]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26798</uri>
			</author>
			<updated>2015-03-08T22:45:58Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=92406#p92406</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78829#p78829" />
			<content type="html"><![CDATA[<p><em>eval()</em> is not evil, но лучше обходится без перевызовов интерпретатора. Во многих случаях этому может помочь представление объектов как ассоциативных массивов с именами свойств и методов в качестве индексов.</p><p>Это годится и для нашего случая: надо, чтобы обработчики всех событий были методами какого-то одного объекта, а <em>Form.DoEvents()</em> возвращал только их названия, а не вызывающие выражения (т.е. без круглых скобок в конце). Если обработчики — глобальные функции, то они уже методы глобального объекта.<br /></p><div class="codebox"><pre><code>//...
button.OnClick = &quot;buttonClick&quot;;
//...

while (form.Visible) {
    var eventName = form.DoEvents();
    if (eventName) this[eventName]();
}
</code></pre></div><p>— в примере учтено, что при закрытии формы <em>Form.DoEvents()</em> завершает работу и возвращает пустую строку. Возможно, даже лучше воспользоваться одним этим условием для выхода из цикла вместо проверки свойства <em>Form.Visible</em>:<br /></p><div class="codebox"><pre><code>//...
button.OnClick = &quot;buttonClick&quot;;
//...

var eventName;
while (eventName = form.DoEvents()) this[eventName]();
    //в условии цикла - присваивание, а не равенство
</code></pre></div><br /><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;P.S. Исключительно для полноты изложения</div><div class="fancy_spoiler"><div class="quotebox"><cite>shiz пишет:</cite><blockquote><p>Вероятно, использовать в цикле метод WScript.Sleep с небольшой задержкой (а может быть и с большой).</p></blockquote></div><p>Можно (с небольшой), но не нужно.</p><p><em>Form.DoEvents()</em> может работать в двух режимах, задаваемых необязательным логическим аргументом:<br />синхронном (по умолчанию) — приостанавливая работу, если очередь событий пуста,<br />и асинхронном — возвращая в таком случае пустую строку без задержки.</p><p>В асинхронном режиме второй цикл работать не будет, а первый будет, но с большой загрузкой процессора. Вот, чтобы её убрать и надо было бы в асинхронном режиме добавить в цикл <em>WScript.Sleep()</em>.</p></div></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2014-01-03T21:38:16Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78829#p78829</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78751#p78751" />
			<content type="html"><![CDATA[<p><strong>alexii</strong>, это было не требование поскорее изменить статью на сайте, а скорее мысли вслух при ознакомлении с предметом, т.к. я только что познакомился с библиотекой KiXforms и нашёл её довольно интересной, при этом её отношение к KiXtart достаточно условным.</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2014-01-01T13:37:52Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78751#p78751</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78744#p78744" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>— я бы только убрал подчёркнутое мною.</p></blockquote></div><p>Ну, сие не столь существенно.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2014-01-01T12:55:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78744#p78744</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78725#p78725" />
			<content type="html"><![CDATA[<p>Заинтересовался поднятым вопросом.</p><p><em><a href="http://www.script-coding.com/KiXtart.html">http://www.script-coding.com/KiXtart.html</a></em>:<br /></p><div class="quotebox"><blockquote><p>Язык KiXtart имеет средства построения GUI — плагин KiXforms.</p></blockquote></div><p>Я бы сказал, что KiXforms — никакой не плагин языка KiXtart, а вполне самоценный продукт. Впрочем, в той же статье далее:<br /></p><div class="quotebox"><blockquote><p><span class="bbu">Примечательно, что</span> COM-серверы Kixtart.System и Kixforms.System можно использовать <span class="bbu">и</span> в <span class="bbu">других</span> языках программирования, которые в состоянии выступить в роли OLE-клиента.</p></blockquote></div><p> — я бы только убрал подчёркнутое мною.</p><p>Также упоминание KiXforms здесь на форуме нашёл лишь в теме «<a href="http://forum.script-coding.com/viewtopic.php?id=3311">VBS:&nbsp; Разновидности графических окон</a>».<br />--------------------</p><div class="quotebox"><cite>index пишет:</cite><blockquote><div class="codebox"><pre><code>button.OnClick =buttonClick;</code></pre></div></blockquote></div><p>— в этом месте ошибка — в KiXforms свойство <em>.OnClick</em> и подобные ему — это не ссылки на функции-обработчики событий, а строковые значения, возвращаемые методом <em>Form.DoEvents()</em> при наступлении соответствующего события. Если в языке есть средства позволяющие вычислить выражение или выполнить произвольный код на этом языке из строки (в JScript — это функция <em>eval()</em>), то возвращаемой строкой может быть такое выражение — вызов функции обработчика. (Если таких средств в языке нет, то ничего не потеряно — можно возвращать строку однозначно связанную с произошедшим событием для использования в качестве условия оператора ветвления.) Таким образом, чтобы исходный пример заработал, в нём нужно исправить:<br /></p><div class="codebox"><pre><code>//...
button.OnClick = &quot;buttonClick()&quot;;
//...

while (form.Visible) {
    eval(form.DoEvents());
}
</code></pre></div><br /><p><em>04.01.2014:</em> А лучше — <a href="http://forum.script-coding.com/viewtopic.php?pid=78829#p78829">без <em>eval()</em></a>.</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2014-01-01T04:23:27Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78725#p78725</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=45809#p45809" />
			<content type="html"><![CDATA[<p><span style="color: Green"><strong>index</strong>, либо Вы начнёте читать и учитывать <a href="http://forum.script-coding.com/viewtopic.php?pid=45783#p45783">замечания</a> модератора, либо будет <a href="http://forum.farmanager.com/viewtopic.php?p=71617#p71617">как-то так</a>.</span></p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-03-04T18:09:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=45809#p45809</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=45804#p45804" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>shiz пишет:</cite><blockquote><p>Вероятно, использовать в цикле метод WScript.Sleep с небольшой задержкой (а может быть и с большой).</p></blockquote></div><p>ок, и как это можно использовать для перехвата событий?<br />WScript.Sleep только приостанавливает выполнение скрипта на какой то промежуток.<br />а я ищу способ выполнения методов, в ответ на те или иные события.<br />в языке Kixtart есть метод Execute, но аналогичного в JScript пока не нашел.<br />возможно требуется задействовать метод какого нибудь другого OLE Automation.<br />пробовал использовать такую конструкцию:</p><div class="codebox"><pre><code>while (form.Visible){
buttonClick.call(form.DoEvents()); 
}</code></pre></div><p>вариант работает, но не является универсальным для других событий кнопок.<br />значит &quot;call&quot;&nbsp; или &quot;apply&quot; можно исопльзовать, просто нужно получить ссылку на объект, который передал события. к сожалению пока не нашел вариант как это сделать.</p><p>что я добиваюсь ? возмжность использования JScript при работе с kixforms.dll </p><p>в &quot;Kixtart.System&quot;&nbsp; ActiveX я нашел свойство, которое пытаюсь исользовать для перехвата событий &quot;EventHandler&quot;, правда пока безрезультатно.</p><div class="codebox"><pre><code>button.OnClick =system.EventHandler(form, buttonClick);</code></pre></div>]]></content>
			<author>
				<name><![CDATA[index]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26798</uri>
			</author>
			<updated>2011-03-04T14:36:42Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=45804#p45804</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=45794#p45794" />
			<content type="html"><![CDATA[<p>Вероятно, использовать в цикле метод WScript.Sleep с небольшой задержкой (а может быть и с большой).</p>]]></content>
			<author>
				<name><![CDATA[shiz]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26249</uri>
			</author>
			<updated>2011-03-04T10:08:11Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=45794#p45794</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=45783#p45783" />
			<content type="html"><![CDATA[<p><span style="color: Green"><strong>index</strong>, код оформляется <a href="http://forum.script-coding.com/help.php#bbcode">тэгом «code»</a>, предложения пишутся с заглавной буквы. Я поправил Ваш пост.</span></p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-03-03T17:37:10Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=45783#p45783</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Kixtart/JScript: запустить в цикле form.DoEvents()]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=45781#p45781" />
			<content type="html"><![CDATA[<p><span style="color: Green"><strong>П</strong></span>ожалуйста помогите разобраться как запустить в цикле&nbsp; form.DoEvents();<br /><span style="color: Green"><strong>В</strong></span> Kixtart и VBS это делается с помощью&nbsp; Execute.<br /><span style="color: Green"><strong>П</strong></span>робовал через call&nbsp; JScript, но к сожалению ничего не вышло. <br /></p><div class="codebox"><pre><code>// Kixtart 

Break On
$System = CreateObject(&quot;Kixtart.System&quot;)
$Form = $System.Form()
$Form.Text = &quot;Application&quot;
$Form.Show
While $Form.Visible 
 $=Execute($Form.DoEvents) 
Loop 
Exit 0

//-----------------------------
// JScript

var system = new ActiveXObject(&quot;Kixtart.System&quot;);
form = system.Form();
form.Text = &quot;Application&quot;;

var button = form.Controls.Add(&quot;Button&quot;);
button.Text = &quot;ok&quot;;
button.Center();
button.OnClick =buttonClick;


function buttonClick(){        
WScript.Echo(&quot;OK&quot;);
};


form.Center();
form.Show();



а вот здесь проблема с  Execute, не получается перхватить события 
как это можно решить на JScript ?

while (form.Visible){
form.DoEvents();
}

-----------------</code></pre></div>]]></content>
			<author>
				<name><![CDATA[index]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26798</uri>
			</author>
			<updated>2011-03-03T17:15:12Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=45781#p45781</id>
		</entry>
</feed>
