Microsoft Script Control

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Wolf4D
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 06.10.2006 (Пт) 20:18

Microsoft Script Control

Сообщение Wolf4D » 06.03.2008 (Чт) 22:18

Когда-то давно и где-то не здесь я уже создавал тему по этому компоненту. Меня тогда послали в поиск, указав на нужную информацию. Ну так вот, я вернулся, но там мне не помогли. Решил прийти сюда
*Это было вроде как приветствие новичка всем обитателям форума*
Пытаюсь разобраться с этим мудрёным компонентом - Microsoft Script Control - возникает проблема:
Имеется форма, на ней - несколько объектов (присутствуют массивы). Пытаюсь через Microsoft Script Control повлиять на один из них - он мне ошибку.
Что я делаю не так, мне вроде как понятно, поэтому я спрашиваю: как сделать правильно?
Заранее спасибо!
P.S. Visual Basic 6

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 07.03.2008 (Пт) 0:38

Массивы чего? Что значит повлиять? Какая ошибка? Что вообще требуется сделать? И желательно с кодом, с кодом :)
Salus populi suprema lex

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 07.03.2008 (Пт) 11:16

Wolf4D
Ошибку, говоришь, он тебе выдаёт. Это ведь замечательно, ведь 90% решения проблемы - описания ошибки. Ты предпочёл скрыть его (описание ошибки, текст) от нас? Что-ж, мы скроем от тебя решение проблемы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 07.03.2008 (Пт) 16:26

Чтобы повлиять на объекты формы через VBS надо иметь ссылку на них. Ты ее передал?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Wolf4D
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 06.10.2006 (Пт) 20:18

Сообщение Wolf4D » 07.03.2008 (Пт) 18:25

Так, с описанием ошибки я действительно ступил...
Ошибка такая: "Требуется объект <имя объекта>"
Чтобы повлиять на объекты формы через VBS надо иметь ссылку на них. Ты ее передал?

Упс... Я ньюб... Это не отговорка, это констатация факта :)
Не передал... Можете популярно послать в нужный FAQ (зачёркнуто) объяснить, как это делать? :oops:

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 07.03.2008 (Пт) 19:08

Может тебе вот это чем поможет.
Вложения
script_demo.zip
(8.41 Кб) Скачиваний: 76

Wolf4D
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 06.10.2006 (Пт) 20:18

Сообщение Wolf4D » 10.03.2008 (Пн) 20:58

Спасибо огромное, Atoman!
То, что мне надо. Проблема решилась на 90%...
Вот только последние 10% упорно не хотят сдаваться...
------------------------
Получил вот такой код:
Код: Выделить всё
Private Sub Form_Load()
a = Initial("Command1", "Command1")
End Sub

Function Initial(sControl As String, sCtlName As String)
ScriptControl1.AddObject sCtlName, Me.Controls(sControl)
End Function


Private Sub Command1_Click()
ScriptControl1.ExecuteStatement "command1.visible = false"
End Sub


На форме, соответственно, кнопка command1 и ScriptControl1... Но вот что делать, если мне надо работать с массивом объектов? (предположим, на форме - массив элементов с названием "Command1", а новые добавляются через метод Load - "Load Command1(mcount)"). Возможно, надо как-то изменить систему?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 10.03.2008 (Пн) 21:33

Если Command1 - массив, то
Код: Выделить всё
ScriptControl1.ExecuteStatement "command1(x).visible = false"
Это во-первых, а во-вторых повторю, если с первого раза не понятно:
Ошибку, говоришь, он тебе выдаёт. Это ведь замечательно, ведь 90% решения проблемы - описания ошибки. Ты предпочёл скрыть его (описание ошибки, текст) от нас? Что-ж, мы скроем от тебя решение проблемы.
Лучший способ понять что-то самому — объяснить это другому.

Wolf4D
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 06.10.2006 (Пт) 20:18

Сообщение Wolf4D » 10.03.2008 (Пн) 21:49

Antonariy писал(а):Если Command1 - массив, то
Код: Выделить всё
ScriptControl1.ExecuteStatement "command1(x).visible = false"
Это во-первых, а во-вторых повторю, если с первого раза не понятно:
Ошибку, говоришь, он тебе выдаёт. Это ведь замечательно, ведь 90% решения проблемы - описания ошибки. Ты предпочёл скрыть его (описание ошибки, текст) от нас? Что-ж, мы скроем от тебя решение проблемы.

Ошибка для пердыдущего кода была написана выше. Теперь выдаёт такую ошибку "Управление <имя элемента> не найдено". Возникает в строчке
Код: Выделить всё
ScriptControl1.AddObject sCtlName, Me.Controls(sControl)
при попытке загнать через
Код: Выделить всё
a = Initial("Command1", "Command1")
массив.

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 10.03.2008 (Пн) 23:06

Вот держи, работает с массивами кнопок.

Код: Выделить всё
Private Sub Command2_Click()
    ScriptControl1.ExecuteStatement "Command(1).visible = False"
    ScriptControl1.ExecuteStatement "Command(0).visible = False"
End Sub

Private Sub Form_Load()
    ScriptControl1.AddObject "Command", Command1()
End Sub


---------------------------------------------------------------------------------

Вот так тоже работает.

Код: Выделить всё
Private Sub Form_Load()
    ScriptControl1.AddObject "Command", Me.Controls("Command1")
End Sub
Последний раз редактировалось Atoman 10.03.2008 (Пн) 23:29, всего редактировалось 2 раз(а).

Wolf4D
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 06.10.2006 (Пт) 20:18

Сообщение Wolf4D » 10.03.2008 (Пн) 23:14

Atoman писал(а):Вот держи, работает с массивами кнопок.

Код: Выделить всё
Private Sub Command2_Click()
    ScriptControl1.ExecuteStatement "Command(1).visible = False"
    ScriptControl1.ExecuteStatement "Command(0).visible = False"
End Sub

Private Sub Form_Load()
    ScriptControl1.AddObject "Command", Command1()
End Sub

Огромное спасибо! Всё работает! Тему пока не закрывайте, плиз, вдруг у меня и этого строптивого компонента опять возникнут разногласия :oops:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.03.2008 (Пн) 23:17

Wolf4D
Ты видел чтобы здесь где-нибудь кто-нибудь закрывал темы (не в порядке наказания)?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Сообщение Zenitchik » 27.05.2008 (Вт) 19:04

Как корректно передать в в скрипт массив?

Проблема такая: в скрипт передан объект, реализующий метод
AnalisURL
Этот метод принимает строку в качестве аргумента, а возвращать должен массив строк.
И аргумент и массив описаны как Variant. Когда я в скрипте пытаюсь использовать этот метод, возникает ошибка "Несоответствие типов".

Чего я не учитываю? Как коректно передать массив?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 27.05.2008 (Вт) 20:24

Того, что передавать в SC можно только объекты (AddObject ни о чем не говорит?). Передай объект, который свойством возвращает массив, и работай с этим свойством.
Лучший способ понять что-то самому — объяснить это другому.

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Сообщение Zenitchik » 27.05.2008 (Вт) 21:59

Тогда уж проще Collection передать...
Ладно, черт с ним. Пусть будет.

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Сообщение Zenitchik » 01.06.2008 (Вс) 19:28

Другой вопрос:

За что в ScriptControl отвечают модули?
Как из одного модуля воспользоваться процедурой, содержещейся в другом?
Последний раз редактировалось Zenitchik 02.06.2008 (Пн) 11:59, всего редактировалось 1 раз.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 02.06.2008 (Пн) 8:52

Zenitchik писал(а):Как корректно передать в в скрипт массив?

Проблема такая: в скрипт передан объект, реализующий метод AnalisURL
Этот метод принимает строку в качестве аргумента, а возвращать должен массив строк.
И аргумент и массив описаны как Variant. Когда я в скрипте пытаюсь использовать этот метод, возникает ошибка "Несоответствие типов".

Чего я не учитываю? Как корректно передать массив?

Нужно учитывать, что все массивы в скриптах есть массивы вариантов (Variant). Никакие другие типы (например, String, Long etc) в качестве типов элементов не допускаются.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Сообщение Zenitchik » 02.06.2008 (Пн) 12:04

Vi писал(а):Нужно учитывать, что все массивы в скриптах есть массивы вариантов (Variant).

Это я учел и именно таким был мой массив.
Я в результате плюнул на это дело и написал стековую машину, чтобы свести обмен данными между скриптом и программой к загрузке в стек строковых констант ))).

Без модулей я, по большому счету, тоже обошелся, но все же хотелось бы разобраться в вопросе:

Для чего модули служат и как юзать один модуль из другого? Кстати, где бы по нему мануал найти? У меня был раньше в виде отдельного chm - так я его куда-то пролюбил...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67

    TopList