|
MSScriptControl не получается | ☑ | ||
---|---|---|---|---|
0
Андрюха
15.02.06
✎
14:51
|
Хочу сделать простейшее действие - показать MsgBox. Вылетает исключение. Что я не так делаю?
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl"); Скрипт.Language="vbscript"; Текст = "Сообщение"; Заголовок = "Заголовок"; ТекстСкрипта = "MsgBox(""" + Текст + """, 0, """ + Заголовок + """)"; Результат = Скрипт.Run(ТекстСкрипта); Сообщить(Результат); |
|||
1
Андрюха
15.02.06
✎
14:56
|
А вот так сработало:
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl"); Скрипт.Language="vbscript"; Текст = "Сообщение"; Заголовок = "Заголовок"; ТекстСкрипта = "MsgBox(""" + Текст + """, 0, """ + Заголовок + """)"; Скрипт.AddCode(" |Function Main() | Main = " + ТекстСкрипта + " |End Function"); Результат = Скрипт.Run("Main"); Сообщить(Результат); |
|||
2
WiFi
15.02.06
✎
15:01
|
(0) В первом случае, вероятно, должен использоваться метод ExecuteStatement.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexpvb/html/usingscriptcontrolmethods.asp |
|||
3
Андрюха
15.02.06
✎
15:10
|
Не работает. Изменил в коде:
... ТекстСкрипта = "MsgBox(""" + Текст + """, 36, """ + Заголовок + """)"; //Скрипт.AddCode(" //|Function Main() //| Main = " + ТекстСкрипта + " //|End Function"); // //Результат = Скрипт.Run("Main"); Результат = Скрипт.ExecuteStatement(ТекстСкрипта); ... |
|||
4
Андрюха
15.02.06
✎
15:11
|
И сразу попутно вопрос - может кто знает как задать таймаут для MsgBox и значение по таймауту?
|
|||
5
Андрюха
15.02.06
✎
15:13
|
Нашёл! Спасибо WiFi. Оказывается надо использовать Eval. Во как:
Результат = Скрипт.Eval(ТекстСкрипта); |
|||
6
smaharbA
15.02.06
✎
15:15
|
Для мсгбокса нет таймаута, нужен Popyp объекта WScript.Shell но если "напрямую" из 1С к этому объекту то таймаута небудет, через МССкрипт будет
|
|||
7
WiFi
15.02.06
✎
15:16
|
(5) будем знать ;)
|
|||
8
Андрюха
15.02.06
✎
15:16
|
(6) А можно пример кода накидать?
|
|||
9
Андрюха
15.02.06
✎
15:17
|
Я так понимаю, что надо из MSScript слепить WScript.Shell ?
|
|||
10
WiFi
15.02.06
✎
15:19
|
В самом методе MsgBox нет такого параметра Timeout:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/ae073d50-e4a4-4e23-8e46-0cb1369965e7.asp |
|||
11
smaharbA
15.02.06
✎
15:38
|
scr =Новый COMОбъект("MSScriptControl.ScriptControl");
scr.Language="javascript"; text = "'Сообщение'"; head = "'Заголовок'"; scr.ExecuteStatement("var WSHShell=new ActiveXObject('WScript.Shell')"); //Но просче так //WSHShell=Новый COMОбъект("WScript.Shell"); //scr.AddObject("WSHShell",WSHShell); //или еще проще (всего две строчки) //WSHShell=Новый COMОбъект("WScript.Shell"); //WSHShell.Popup(Text,Timing,Head,3); scr.ExecuteStatement("Text=" + text); scr.ExecuteStatement("Head=" + head); scr.ExecuteStatement("Timing=" + 2); scr.Eval("WSHShell.Popup(Text,Timing,Head,3);"); ... Незнаю как в 8-ке, но в 7-ке таймаут небудет работать |
|||
12
Андрюха
15.02.06
✎
15:39
|
А я делаю вот так. И к меня ругается на CreateObject. Вот код:
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl"); Скрипт.Language="vbscript"; Скрипт.AddCode(" |Function Main() | Obj=CteateObject(""WScript.Shell"") | Main = Obj.Popup(""" + Текст + """, " + Формат(Таймаут, "ДП=0") + ", """ + Заголовок + """, 32) |End Function"); Результат = Скрипт.Run("Main"); Сообщить(Результат); |
|||
13
smaharbA
15.02.06
✎
15:40
|
CteateObject ?
|
|||
14
WiFi
15.02.06
✎
15:41
|
(3) у тебя здесь не сработало, т.к. скобки у MsgBox не нужны. Так правильно:
ТекстСкрипта = "MsgBox """ + Текст + """, 36, """ + Заголовок + """"; Результат = Скрипт.ExecuteStatement(ТекстСкрипта); Правда Результата не будет никакого. Только Box и появится ;) (5) а здесь сработало, т.к. MsgBox со скобками возвращает значение. Вывод: Run - используется для вызова процедуры, ExecuteStatement - для выполнения кода, который не возвращает значения, Eval - для вычисления значения. |
|||
15
WiFi
15.02.06
✎
15:43
|
(13) :)))
|
|||
16
Андрюха
15.02.06
✎
15:44
|
(13) Но. А чо?
|
|||
17
smaharbA
15.02.06
✎
15:45
|
(16) Еще внимательней глянь...
|
|||
18
Salvador Limones
15.02.06
✎
15:45
|
(16) Не видишь?
|
|||
19
Андрюха
15.02.06
✎
15:46
|
Да я уж вижу. New ActiveX
|
|||
20
Андрюха
15.02.06
✎
15:47
|
В примерах, кстати есть его использование:
'создаётся объект типа "IShellDispatch": Set objShellApp = CreateObject("Shell.Application") |
|||
21
smaharbA
15.02.06
✎
15:47
|
(19) Нет, это я применил чтобы с кавычками не париться, а апострофы использовать
а у тебя CteateObject <> CreateObject |
|||
22
Андрюха
15.02.06
✎
15:48
|
аааа.... точно! Сенкс!
|
|||
23
smaharbA
15.02.06
✎
15:48
|
+(21) new ActiveXObject это javascript...
|
|||
24
Андрюха
15.02.06
✎
15:48
|
Но таймаута всё-равно нету. Нигде.
|
|||
25
smaharbA
15.02.06
✎
15:50
|
А зачем тебе через мсскрипт, есть ведь предупреждение ?
|
|||
26
Андрюха
15.02.06
✎
15:50
|
Оно без иконок.
|
|||
27
Андрюха
15.02.06
✎
15:51
|
Warning, Information и т.д.
|
|||
28
smaharbA
15.02.06
✎
15:52
|
(26) Есть способ, но тоже проблематичный...
А почему-бы модальную форму не применить? А тайминг можно и системный задействовать |
|||
29
smaharbA
15.02.06
✎
18:54
|
На форму кнопку(скрытую) с хоткеем F12 и текст скрытый с формулой Закрыть
... Перем т; //******************************************* Функция Закрывать() Форма.Заголовок(ТекущееВремя()); Если т<_GetPerformanceCounter()-10000 Тогда Форма.Закрыть(); Возврат т; КонецЕсли; Форма.Обновить(); КонецФункции // Закрывать Процедура ПриОткрытии() т=_GetPerformanceCounter(); WSHShell=СоздатьОбъект("WScript.Shell"); WSHShell.SendKeys("{F12}"); КонецПроцедуры // ПриОткрытии ... |
|||
30
Андрюха
16.02.06
✎
06:11
|
(28) Не, с модальной формой - это не то. Хотелось чем-то типа MsgBox. Может кто-нибудь знает способ вызвать системный диалог с таймаутом и значением по умолчанию?
|
|||
31
smaharbA
16.02.06
✎
06:42
|
(30) Дак вот и попробуй (29) и увидишь что выйдет, кнопок с действиями сколь угодно... и иконок...страшащих картинок...
|
|||
32
Андрюха
16.02.06
✎
07:18
|
Спасибо, но это не то. Это надо форму, то-сё... MsgBox было бы элегантней, ну да видать не судьба.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |