На главную страницу
Русский English
 


Поддержка
Форум
Техподдержка
Закрытый разделПерсональная

Авторизация

Запомнить меня на этом компьютере
  Забыли свой пароль?
  Регистрация



Поиск по сайту


Подписка

Изменение параметров

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>&nbsp</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


Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация







Программный комплекс «RasrWin»
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019