Вверх ↑
Ответов: 41
Рейтинг: 0
#1: 2018-05-09 14:00:39 ЛС | профиль | цитата
Теперь компонент может создавать таймеры (с дополнением Sleep метода), может вызывать методы и получать переменные между скриптами

например так:

Add(MainForm,2953706,140,112)
{
Width=506
Caption="VBScript_Me_Timer_demo"
Position=1
}
Add(VBJScript,15800674,224,112)
{
EventPoints=#7:onEvent|
VarPoints=#4:##Me|
Script=#19:Dim myVar, myVarStr|0:|32: myVarStr = "Моя переменная = "|13: myVar = 100|2: |18:Sub Demo( str_in )|15: MsgBox str_in|7:End Sub|0:|21:Sub onTimer( strMsg )|21: sys.onEvent strMsg |7:End Sub|
link(onEvent,11375942:doEvent1,[])
}
Add(VBJScript,13030562,224,182)
{
WorkPoints=#7:doStart|6:doStop|7:doSleep|
EventPoints=#7:onTimer|
DataPoints=#3:scr|
Script=#24:' Переменные под обьекты|15:Option Explicit|56:Dim MyScript, objTimer1, objTimer2, objTimer3, objSleep |0:|28:' Процедура тиков таймера №1|17:Sub onTimerVBS1()|31: sys.onTimer "onTimerVBS1()!" |7:End Sub|0:|28:' Процедура тиков таймера №2|17:Sub onTimerVBS2()|31: sys.onTimer "onTimerVBS2()!" |7:End Sub|0:|28:' Процедура тиков таймера №3|17:Sub onTimerVBS3()|47: ' Вызов процедуры onTimer внешнего скрипта!!!|57: MyScript.onTimer("onTimer() внешнего скрипта! " & Now) |7:End Sub|0:|44:' назначанная процедура остановки таймера №3|16:Sub onStopVBS3()|94: MsgBox "Таймер №3 вызвал процедуру остановки событий по количеству тиков или методом Stop()"|7:End Sub|0:|19:Sub doStart(dt,Idx)|0:|79: ' Подключаем удалённый скрипт через сервисную точку ##Me (и только ##Me !!!)|25: Set MyScript = sys.scr|64: ' Теперь можно читать внешние переменные и вызывать процедуры|48: MsgBox (MyScript.myVarStr) & (MyScript.myVar)|42: ' Вызываем процедуру удалённого скрипта|40: MyScript.Demo( "Hello VBJScript!!!" )|3: |47: ' Создаём таймер №1 методом "CreateTimer()"|80: Set objTimer1 = sys.CreateTimer() ' вызов на создание таймера без параметров!|37: ' Присваеваем интервал тиков в ms |56: ' (если не присваивать то по умолчанию 1000 = 1 сек) |27: objTimer1.Interval = 100|65: ' AutoStop = 0 говорит о том что таймер будет тикать постоянно|62: ' Присваивать не обязательно т.к присваивается по умолчанию|25: objTimer1.AutoStop = 0|39: ' Присваеваем процедуру вызова тиков|36: objTimer1.onTimer = "onTimerVBS1"|21: ' Запускаем таймер|59: objTimer1.Start() ' вызов метода запуска без параметров!|3: |30: ' По аналогии с таймером №1|36: Set objTimer2 = sys.CreateTimer()|27: objTimer2.Interval = 200|25: objTimer2.AutoStop = 0|36: objTimer2.onTimer = "onTimerVBS2"|22: objTimer2.Start() |3: |48: ' По аналогии с таймером №1 но с автостопом и|40: ' процедурой вызова остановки таймера|36: Set objTimer3 = sys.CreateTimer()|27: objTimer3.Interval = 300|26: objTimer3.AutoStop = 10|0:|50: ' по сути присвоение процедур должно быть таким|50: ' Set objTimer3.onTimer = GetRef("onTimerVBS3")|53: ' Set objTimer3.onStop = GetRef("onStopVBS3") |48: ' но пока не нашёл решения для реализации ...|1: |36: ' Присваеваем имя процедуры тиков|47: ' назначить процедуру тиков в другом скрипте|57: ' например так objTimer3.onTimer = "MyScript.onTimer" |63: ' или так Set objTimer3.onTimer = GetRef("MyScript.onTimer")|73: ' не получится, поэтому через переходник пока... (с onStop тоже самое)|38: objTimer3.onTimer = "onTimerVBS3" |3: |77: ' Если назначить событие на остановку (objTimer3.onStop = "onStopVBS3" ) |68: ' то оно выполняется и при objTimer3.Stop() если таймер запущен |61: ' и при остановке по количеству тиков (свойство AutoStop) |3: |50: ' присваевается имя процедуры остановки таймера|36: objTimer3.onStop = "onStopVBS3" |22: ' Запускаем таймер |20: objTimer3.Start()|12: |7:End Sub|0:|27:' остановка всех 3 таймеров|18:Sub doStop(dt,idx)|0:|42: If not IsObject(objTimer1) then Exit Sub|60: objTimer1.Stop() ' вызовы методов отановки без параметров!|18: objTimer2.Stop()|20: objTimer3.Stop() |2: |32: ' Удаляем обьекты обязательно!|25: Set MyScript = Nothing|25: Set objTimer1 = Nothing|25: Set objTimer2 = Nothing|25: Set objTimer3 = Nothing|0:|7:End Sub|0:|69:' Демонстрация задержки выполнения скрипта (замена WScript.Sleep(ms))|66:' Метод Sleep ограничен по минимальному времени задержки ~10-15 ms|66:' Работу запущенных таймеров не останавливает и неподвешивает GUI |20:Sub doSleep(dt, idx)|33: MsgBox "Тест задержки на 3 сек"|50: ' Создаём либо используем готовый обьект таймера|34: Set objSleep = sys.CreateTimer()|42: objSleep.Sleep(3000) ' задержка на 3 сек|25: MsgBox "Тест закончен" |23: ' не забываем удалить|24: Set objSleep = Nothing|7:End Sub|
link(onTimer,5471364:doWork2,[])
link(scr,15800674:##Me,[])
}
Add(Button,2210866,140,182)
{
Left=25
Top=20
Caption="Start"
link(onClick,13030562:doStart,[])
}
Add(Memo,10002883,399,182)
{
Left=110
Top=20
Width=355
Height=225
AddType=1
ScrollBars=2
}
Add(LED,1354173,399,112)
{
Left=40
Top=120
}
Add(Hub,11375942,308,112)
{
link(onEvent1,1354173:doChangeValue,[])
link(onEvent2,5471364:doWork1,[(354,125)])
}
Add(HubEx,5471364,350,182)
{
link(onEvent,10002883:doAdd,[])
}
Add(Button,14807500,140,224)
{
Left=25
Top=50
Caption="Stop"
link(onClick,13030562:doStop,[(186,230)(186,195)])
}
Add(Button,12683136,140,266)
{
Left=25
Top=80
Caption="Sleep"
link(onClick,13030562:doSleep,[(198,272)(198,202)])
}

карма: 0

0