Вверх ↑
Этот топик читают: Гость
Ответов: 2125
Рейтинг: 159
#46: 2008-12-12 17:16:32 ЛС | профиль | цитата
andrestudio писал(а):
что в коде который Вы выложили куда его приткнуть

В файле hiVBJScript.pas нужно заменить function TMe.GetIDsOfNames, а код, который выше, я исправил, чтобы с комментариями тоже работало.
карма: 1

0
Администрация
Ответов: 15273
Рейтинг: 1501
#47: 2008-12-12 17:30:38 ЛС | профиль | цитата
Nic писал(а):
Уже давно, Dilma объяснял почему это так, помню что ничего не понял, но принял на веру, что так надо и больше вопросов не задавал.

По поводу имен говорилось о том, что названия точек к мультиэлементам и их производным должны соответствовать нотации используемого компилятора(начинаться с буквы или _ и содержать только латиницу и цифры). Еще одним ограничением, распространяемым на имена точек всех элементов является то, что названия верхних и нижних не должны совпадать - это чревато проблемами не только компиляции, но и работы среды. Больше вроде нигде никаких ограничений не было...
карма: 23
0
Ответов: 2125
Рейтинг: 159
#48: 2008-12-12 20:16:46 ЛС | профиль | цитата
Dilma писал(а):
Больше вроде нигде никаких ограничений не было

В текущей реализации VBJScript точки в списке (events,data) должны быть отсортированы по возрастанию (отсюда и мнения, что они должны называться xxx1,xxx2,xxx3...). Просто TStrList.Find в КОЛе использует бинарный поиск.
карма: 1

0
Администрация
Ответов: 15273
Рейтинг: 1501
#49: 2008-12-12 21:54:05 ЛС | профиль | цитата
tsdima писал(а):
TStrList.Find

ага. Я только на момент рекодинга менеджера профилей элементов пакета обнаружил эту интересную особенность работы метода find. Это конечно исправлять надо.
карма: 23
0
Ответов: 4400
Рейтинг: 472
#50: 2008-12-16 16:12:13 ЛС | профиль | цитата
Nic, tsdima, подскажите как можно получить событие из скрипта если при использовании "обычной" функции VBScript "CreateObject" организовать обработку событий нельзя и соответственно такой код

Set TObject = WScript.CreateObject("WScript.Object", "TObject_")

в компоненте не работает. Если ещё какие способы

карма: 4

0
Ответов: 2125
Рейтинг: 159
#51: 2008-12-16 16:28:19 ЛС | профиль | цитата
andrestudio, если я правильно понял, нужно обработать событие, которое генерируется объектом, который был создан посредством стандартной функции CreateObject, так?
Кстати, WScript не пиши, это понятие существует только в windows script, т.е. при запуске файлов .wsh
карма: 1

0
Ответов: 4400
Рейтинг: 472
#52: 2008-12-16 16:38:27 ЛС | профиль | цитата
tsdima, именно так, но не получается

пробовал в простом файле vbs CreateObject(<ProgID>,<Prefix>) не работает пока не обьявить так WScript.CreateObject(<ProgID>,<Prefix>)
карма: 4

0
Ответов: 2125
Рейтинг: 159
#53: 2008-12-16 16:44:54 ЛС | профиль | цитата
Если ты почитаешь документацию по windows script, то тебе станет ясно, зачем наряду с обычной (встроенной в движок скрипта) функцией CreateObject существует ещё и метод WScript.CreateObject. Главное его отличие как раз в том, что он позволяет организовать обработку событий. Объект WScript создаётся автоматически при обработке скрипта программой WScript.exe и это его системный объект, наподобие нашего sys. Но наш системный объект не содержит такой функции.
карма: 1

0
Ответов: 4400
Рейтинг: 472
#54: 2008-12-16 16:53:05 ЛС | профиль | цитата
tsdima, вот я как раз до этого сегодня дошёл и упёрся в стенку , посему и спросил в надежде что есть ещё какие нибудь способы сии мне не известные (так сказать обходные пути)
карма: 4

0
Ответов: 2125
Рейтинг: 159
#55: 2008-12-16 17:12:02 ЛС | профиль | цитата
Обходных путей нет, нужно делать функцию sys.CreateObject с аналогичными параметрами, а это не один десяток строк. В принципе, особых сложностей нет, нечто аналогичное уже есть в UseActiveX (я имею ввиду класс, который получает события - TMyEventHandler), так что при наличии у меня свободного времени я скорее всего сделаю такую фичу.
карма: 1

1
Голосовали:andrestudio
Ответов: 4400
Рейтинг: 472
#56: 2008-12-16 17:29:07 ЛС | профиль | цитата
tsdima, да было бы очень замечательно. Много полезных скриптов где от WScript избавится не получается
карма: 4

0
Ответов: 2125
Рейтинг: 159
#57: 2008-12-16 20:48:52 ЛС | профиль | цитата
Блин, целый час, наверное, убил, пытаясь выяснить, почему при передаче объектов ошибка происходит
Оказывается их нужно для скрипта обёртывать Variant-ом и передавать этот Variant по ссылке. Уфф.

Вобщем, я не уверен, что память везде освобождается, но оно работает! Если будут косяки, сразу сообщи. Короче - тестировать надо.
карма: 1

1
файлы: 1vbjscript_with_events.rar [6.4KB] [233]
Голосовали:andrestudio
Ответов: 4400
Рейтинг: 472
#58: 2008-12-16 21:38:41 ЛС | профиль | цитата
tsdima, заменил hiVBJScript.pas, пример работает.
Спасибо за поддержку.

Появился вопрос. Чем отличается sys.CreateObject от CreateObject , я так понял этот метод позволяет таки получить события от обьекта.
карма: 4

0
Ответов: 2125
Рейтинг: 159
#59: 2008-12-16 21:52:45 ЛС | профиль | цитата
andrestudio писал(а):
Чем отличается sys.CreateObject от CreateObject

CreateObject встроен в VBScript, т.е. это функция неотделима от языка.
А sys.CreateObject - это моя функция, которую я добавил к объекту sys, и её параметры я обрабатываю сам, т.е. создать объект, приаттачить обработчик событий, реализовать этот обработчик, и т.п.

Кстати, по поводу
andrestudio писал(а):
нужно склонить обьект принять стринг за имена переменных

Есть в JavaScript такая фича:

function doWork(dt, idx)
{
obj = Array();
obj.test1 = 'AAA';
obj.test2 = 'BBB';
sys.onTest(obj['test1']);
}
То есть индекс массива и имя после точки - это одно и то-же, по крайней мере в JavaScript.

карма: 1

2
Голосовали:andrestudio, Minkovsky
Ответов: 4400
Рейтинг: 472
#60: 2008-12-16 22:08:00 ЛС | профиль | цитата
запустил свой скрипт и вместо WScript.CreateObject вписал sys.CreateObject

как кричал кот в Простоквашино "УРА! ЗАРАБОТАЛО" Хоть ламбаду танцуй (жаль нет смайлика)


------------ Дoбавленo:

Я тут колдовал с Include но нифига не получилось (сложно это пока для меня) а сейчас получается необходимость отпала в этом.
Вобщем спасибо большое ещё раз.
карма: 4

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)