Русский
English
Главная
RastrWin
Программа
Последние изменения
Часто задаваемые вопросы
Аннотация
Лицензирование и защита от копирования
Права Windows для пользователя RastrWin
Курсы
Компонентная архитектура
Интерфейс
Инструкция по установке
Документация, видео, презентации
Свидетельство о регистрации
RastrKZ
RastrMDP
RastrOS
ZamerSeti
Архив
Bars-Lincor
Расчетная модель
Система моделирования
Последние изменения
Программа
Инструкция пользователя
Инсталляция
RUStab
Загрузка
Последние изменения
Поддержка
Поддержка
Форум
Техподдержка
Персональная
Макро студия
Макро студия
Автоматизация
Работа с SQL
Оценка параметров ЛЭП и ТР
Эффективность размыкания сети
Анализ напряжений в Excel
Автоматизация с "AutoIt"
Создание графа сети из режима
Передача графики в SVG
Вариантные расчеты
Импортозамещение
О нас
О компании
Фотогалерея
Пользователи
Отчеты об использовании своего имущества
Реквизиты
Поддержка
Форум
Техподдержка
Персональная
Авторизация
Запомнить меня на этом компьютере
Забыли свой пароль?
Регистрация
Поиск по сайту
Подписка
Новости Bars- Lincor
Новости RastrWin
Общие новости
Новости RUStab
Изменение параметров
Hits
67419527
10877
Hosts
3609276
2313
Visitors
53572002
10472
102
Главная
/
Поддержка
/
Форумы
/
Макро
Форум «Макро»
Версия для печати
Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация
Тема: «
HTA
, Интерфейс пользователя » в форуме:
Макро
Просмотров: 14042
Михаил Реутов
Постоянный посетитель
Всего сообщений:
224
Дата регистрации:
21.11.2007
Создано:
02.03.2011 09:12:22
В Макростудии есть пример создания диалогового окна в скриптах RastrWin при помощи IE. Предлогаю другой способ создания диалогового окна при помощи HTA, но по сути это тоже самое, что в Макростудии.
Далее функция, которая создает диалоговое окно:
Код
Function CreateWindow(content,feat
ures,x,y,width,height)
On Error Resume Next
Dim ShellWindows,ShellWindow,
CodeForLinking,form_id,id
,i,document,window
Set CreateWindow = Nothing
Set ShellWindows = CreateObject("Shell.Appli
cation").Windows: Randomize: id = Clng(Rnd*100000)
CodeForLinking = "<title> </title><scr
ipt>window.moveTo(-1000,-
1000);window.resizeTo(0,0
);</script><hta:applicati
on " & features & " />" & _
"<object id=" & id & " style='display:none' classid='clsid:8856F961-3
40A-11D0-A96B-00C04FD705A
2'><param name=RegisterAsBrowser value=1></object>"
CreateObject("WScript.She
ll").Run("mshta about:""" & CodeForLinking & """")
For i=1 to 1000: For Each ShellWindow in ShellWindows: form_id = Clng(ShellWindow.id)
if form_id = id Then: Set document = ShellWindow.container:i = 1000: Exit For: End if: Next
Next
If document is Nothing Then Exit Function
Set window = document.parentWindow
document.open: window.execScript "var rastr;": Set window.rastr = Rastr
document.write content: document.close
if x <= 0 Then x = (window.screen.width - width) / 2
if y <= 0 Then y = (window.screen.height - height) / 2
window.execScript "document.onkeydown = function(){if(event.keyCo
de == 116){return false}};" &_
"window.moveTo(" & x & "," & y & ");window.resizeTo(" & width & "," & height & ")"
Set CreateWindow = window
End Function
Пример использования:
Код
Html = "<HTML>" & vbCrlf & _
"<TITLE>Заголовок окна</TITLE><BODY bgcolor='D4D0C8' scroll=no style='border:0;'>" & vbCrlf &_
"Для проверки подключения события кликните по форме" & vbCrlf &_
"</BODY>" & vbCrlf &_
"</HTML>"
Set window = CreateWindow(Html,"showin
taskbar=yes",0,0,400,400)
if window is Nothing Then
msgbox "Не удалось создать окно !"
End if
set document = window.document
document.onclick = GetRef("document_onclick"
)
document.body.onunload = getref("window_onunload")
Sub document_onclick()
window.alert(window.rastr
.Tables("node").Cols("pn"
).Z(0))
End Sub
Sub window_onunload()
ExitDo = True
End Sub
Do
Sleep 100
Loop Until ExitDo
Фнкция создания окна и примеры использования были взяты здесь:
http://forum.script-codin
g.com/viewto...d=4196&p=2
Профиль
Наверх
Михаил Реутов
Постоянный посетитель
Всего сообщений:
224
Дата регистрации:
21.11.2007
Создано:
02.03.2011 09:22:10
Вопрос к разработчикам.
В примере (см.выше) есть цикл ожидания закрытия окна, выход из которого останавливает выполнение макроса Rastr. При выполнении макроса Rastr блокирует меню, панель инструментов и нельзя изменять данные открытых окон. Хочу, чтобы не блокировало, для этого убираю цикл ожидания, при этом диалоговое окно существует. Но без цикла ожидания
window.rastr?
перестает существовать. Можно ли как-нить сделать, чтобы при завершении макроса объект Rastr продолжал "существовать"?
Профиль
Наверх
Евгений Машалов
Администратор
Всего сообщений:
1059
Дата регистрации:
23.04.2007
Создано:
02.03.2011 19:51:30
Блокировка UI при работе скрипта сделана не просто так, а в силу того, что IRastr - STA-объект, и не стоит пытаться вызывать его одновременно из потока, в котором работает скрипт, и потока, в котором работает интерфейс. Свалится 100%.
Профиль
Наверх
Михаил Реутов
Постоянный посетитель
Всего сообщений:
224
Дата регистрации:
21.11.2007
Создано:
03.03.2011 10:28:48
Вопрос к разработчикам не по теме.
Если макросом выполнить следующий код:
Код
msgbox typename(me)
выдаст сообщение
IRetVal
. Что это за объект? Можно ли его "полезно" использовать? Какие у него методы, свойства и события?
Профиль
Наверх
Евгений Машалов
Администратор
Всего сообщений:
1059
Дата регистрации:
23.04.2007
Создано:
03.03.2011 15:08:09
interface IRetVal : IDispatch
{
[propput, id(1), helpstring("Return")] HRESULT Return([in] VARIANT newVal);
[id(2), helpstring("CreateObjectE
x")] HRESULT CreateObjectEx([in] BSTR bstrProgID, [defaultvalue("")] BSTR bstrEventPrefix, [out, retval] IDispatch **ppDispObject);
[id(3), helpstring("Disconnect")]
HRESULT Disconnect([in] IDispatch *pDisp);
[id(4), helpstring("Sleep")] HRESULT Sleep([in] LONG WaitMilliseconds);
};
IRetVal - это добавление к стандартному функционалу vbscript, которое вводит в пространство имен на глобальном уровне 4 функции. Три из них предназначены для работы с внешними объектами в стиле wscript. Мы их используем для взаимодействия с IE в задаче пользовательского интерфейса. Свойство Return позволяет вернуть некое значение, с тем чтобы проанализировать результат исполнения скрипта. Return используется при работе функций ExecMacroSource/ExecMacro
Path.
HTA кстати прикольно.
Профиль
Наверх
Михаил Реутов
Постоянный посетитель
Всего сообщений:
224
Дата регистрации:
21.11.2007
Создано:
26.02.2013 18:34:47
Цитата
Блокировка UI при работе скрипта сделана не просто так, а в силу того, что IRastr - STA-объект, и не стоит пытаться вызывать его одновременно из потока, в котором работает скрипт, и потока, в котором работает интерфейс. Свалится 100%.
В RastrWin 3 есть такая блокировка? Не заметил.
Есть ли какие-нить ограничения работы в RastrWin 3 с работающим макросом или без такого?
Профиль
Наверх
Александр Александров
Администратор
Всего сообщений:
659
Дата регистрации:
31.05.2008
Создано:
26.02.2013 19:32:14
Rastr3 тоже блокирует UI при работе.
Профиль
Наверх
Вадим
Гость
Создано:
09.01.2014 15:08:02
интересно, что в IE11 убрали поддержку vbscript
http://2to.in/bXB
и при запуске макросов с интерфейсами из-под растра возникают ошибки
Решения:
1. либо все функции переписать через javascript
2. воспользоваться решением
http://2to.in/bXC
Наверх
Олег Бельцов
Посетитель
Всего сообщений:
34
Дата регистрации:
14.05.2012
Создано:
24.10.2018 13:32:09
Делал подобную вещь через IE, завершал макрос в Растре, при этом ссылка в IE продолжала существовать. Из окна IE можно спокойно мониторить и изменять данные в Растре. С падениями пока что не сталкивался.
Профиль
Наверх
Читают тему
гостей:
1
, пользователей:
0
, из них скрытых:
0
Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019