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


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

Авторизация

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



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


Подписка

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

Hits 66985641
4228
Hosts 3541077
661
Visitors 53213052
2878

13


Главная / Поддержка / Форумы / Макро

Форум «Макро»

Версия для печати Версия для печати

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


Тема: «Макро + Rastr3 » в форуме: Макро   Просмотров: 10577
 
Иван Почечуев
Постоянный посетитель
 
Всего сообщений: 175
Дата регистрации: 24.06.2010
Создано: 27.08.2012 17:22:34
 
 
Доброго времени суток , с грусть заметил что излюбленный способ остановки макросов из растра 2 через msgbox("") и нажатие на кнопку стоп в растре 3 не работает, вопрос в том как теперь можно прекратить работу макроса во время его выполнения ?
 
Профиль
Наверх
Вадим
Гость
 
Создано: 27.08.2012 18:27:08
 
 
можно просто написать quit
когда программа дойдет до этого, то выдаст сообщение несоответствие типа и завершится..
можно что угодно писать, лишь бы вышла ошибка
 
Наверх
Вадим
Гость
 
Создано: 27.08.2012 19:01:34
 
 
можно даже вешать различные условия на выход типа if i=3 then quit, как только i станет 3 программа аварийно завершится )
 
Наверх
Иван Почечуев
Постоянный посетитель
 
Всего сообщений: 175
Дата регистрации: 24.06.2010
Создано: 29.08.2012 14:55:48
 
 
Может кто подскажет как в макросе выполнить действия 1)закрыть все окна
2)обновить данные в excel
 
Профиль
Наверх
Вадим
Гость
 
Создано: 29.08.2012 16:47:28
 
 
самый простой метод:
использовать утилиты типа AutoIt или autohotkey: запись движений мыши и клавиатуры, выполнение поставить на горячие клавиши
непростой метод:
посмотреть в сторону SendCommandMain
 
Наверх
Евгений Машалов
Администратор

 
Всего сообщений: 1046
Дата регистрации: 23.04.2007
Создано: 29.08.2012 17:25:17
 
 
Обновить данные в Excel через ДРВ ? Если да, и растр на второй платформе, то написано в
Пользовательский интерфейс
-Динамический обмен с MS Excel
--Интеграция с Microsoft Excel
---ServeRTD
 
Профиль
Наверх
Вадим
Гость
 
Создано: 30.08.2012 19:49:29
 
 
Закрытие окон можно сделать через winapi
для вызова функций использовал DynamicWrapperX (http://www.script-coding­.com/dynwrapx.html)
по скрипту: сначала просматриваются все открытые окна, ищется в заголовке Rastr, далее в найденном окне ищутся и закрываются все дочерние окна
Код

const WM_CLOSE=&H10
Set DX = CreateObject("DynamicWrap­perX")
DX.Register "user32", "EnumWindows",    "i=pl"
DX.Register "user32", "EnumChildWindows",    "i=hpl"
DX.Register "user32", "SendMessage", "i=huul", "r=l"
DX.Register "user32", "GetWindowTextW", "i=hWl"     ' Вариант Unicode.
' DX.Register "user32", "GetWindowText", "i=hSl"    ' Вариант ANSI.

Set RefMain = GetRef("CbkEnumWin")  ' Получение ссылки на функцию.
Set RefChild = GetRef("CbkEnumChildWin")­  ' Получение ссылки на функцию.

pCbkFuncMain = DX.RegisterCallback(RefMa­in, "i=hl", "r=l")  ' Регистрация CbkEnumWin
                                                    ' как функции обратного вызова
                                                    ' и получение указателя.
pCbkFuncChild = DX.RegisterCallback(RefCh­ild, "i=hl", "r=l")                                    
WinList = ""
Title = Space(256)              ' Буфер под заголовок окна (выходная строка).

DX.EnumWindows pCbkFuncMain, 0      ' Вызов EnumWindows с передачей ей указателя на
                                ' callback-функцию.
'msgbox "Список окон:" & vbcrlf & winlist

' ................ Собственно callback-функция .......................

Function CbkEnumWin(hwnd, lparam)
  DX.GetWindowTextW hwnd, Title, 256
  ' DX.GetWindowText hwnd, Title, 256   ' Вариант ANSI.
  If Len(Title) > 0 Then  ' Если длина заголовка больше 0, заносим в список.
   if (instr(1,title,"Rastr")>0­) then
      DX.EnumChildWindows hwnd,pCbkFuncChild, 0  
    end if              
  End If
  CbkEnumWin = 1          ' Если вернуть 0, вызовы прекратятся.
End Function

Function CbkEnumChildWin(hwnd, lparam)
  DX.GetWindowTextW hwnd, Title, 256
  ' DX.GetWindowText hwnd, Title, 256   ' Вариант ANSI.
  If (Len(Title)> 0) Then  ' Если длина заголовка больше 0, заносим в список.
   if (instr(1,Title,"Ready")=0­) then DX.Sendmessage hwnd, WM_CLOSE, 0, 0
   winlist=winlist & Title & vbcrlf
  End If
  CbkEnumChildWin = 1          ' Если вернуть 0, вызовы прекратятся.
End Function
 
Наверх
Михаил Одинцов
Постоянный посетитель
 
Всего сообщений: 148
Дата регистрации: 22.07.2008
Создано: 30.08.2016 13:14:08
 
 
Попробовал в версии 1.77.0.34965 запустить свой старый макрос (он в экселе, много строк - пока не стал пихать его в сообщение) с автоматикой и на строке
kod = Rastr.RunAutomatic(1, 1)
теперь выдается ошибка что Methods RunAutomatic of object IRastr failed.
При этом например метод расчета режима и другие методы работает. Также работает макрос с автоматикой, если запускаешь из под Растр, а со сторонних программ не работает.
Хотелось бы уточнить что, связанное с автоматикой и их работой с макросами, изменилось в новых версиях.
Сам файл автоматики в шаблоне amt, (dwf -я так понимаю автоматика для динамики?), в растре работоспособность проверена. Файл автоматики и шаблон загружается. Не могу найти зацепку и понять в чем проблема.
 
Профиль
Наверх
Евгений Машалов
Администратор

 
Всего сообщений: 1046
Дата регистрации: 23.04.2007
Создано: 30.08.2016 15:59:59
 
 
Если в Растре работает, а во внешней программе нет - скорее всего что-то с шаблонами, т.к. Растр загружает их при старте, а внешняя программа нет. Проверьте по списку в протоколе после старта Растр.

Если не поможет, из внешней программы перед RunAutomatic сделайте Rastr.Save "all","" из этот "all" можете сами загрузить без шаблона в Растр и попробовать RunAutomatic, и если снова не работает - присылайте на mashalov@niipt-ems.ru.
 
Профиль
Наверх



Читают тему
гостей: 1, пользователей: 0, из них скрытых: 0


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







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