Тема: Макрос. Любая активность в автокаде.
На работе поставили учет активного времени. Помогите с макросом, который бы что-нибудь делал в фоновом режиме, пока я работаю. Учитывается любая активность в автокаде.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Макрос. Любая активность в автокаде.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
На работе поставили учет активного времени. Помогите с макросом, который бы что-нибудь делал в фоновом режиме, пока я работаю. Учитывается любая активность в автокаде.
Можно сделать реакцию на события, например на двойной клик мышью.
Тут игрушки есть - http://lithium80.narod.ru/Download.html
Атом, например запусти и сиди "работай" )))
Спасибо, но работу за меня никто не сделает )) Мне нужно, чтобы макрос в фоне работал, не мешая. Двойной клик думаю будет мешать. Но все же как сделать реакцию на события?
Вот пример моей программы. По двойному клику на блоках с именем Block1 вызываю процедуру.
Этот текст программу надо вставить в ThisDrawing:
Private Sub AcadDocument_BeginDoubleClick(ByVal PickPoint As Variant)
Dim pfSS As AcadSelectionSet
Dim Obj As AcadEntity
On Error GoTo 0 ' Turn off error trapping.
On Error Resume Next ' Defer error trapping.
Set pfSS = ThisDrawing.PickfirstSelectionSet
If Err.Number <> 0 Then
GoTo Exit1
End If
If pfSS.Count = 1 Then
Set Obj = pfSS.Item(0)
If Obj.ObjectName = "AcDbBlockReference" Then
If (Obj.Name = "Block1") Then
ThisDrawing.SendCommand "DBLCLKEDIT" & vbCr & "0" & vbCr
Call Module9.BlocksEdit(Obj)
ThisDrawing.SendCommand "DBLCLKEDIT" & vbCr & "1" & vbCr
End If
End If
End If
Exit1:
End Sub
Можно также использовать следующие события:
ОБРАБОТЧИКИ СОБЫТИЙ УРОВНЯ ПРИЛОЖЕНИЯ
Данные события не становятся автоматически доступны при загрузке VBA, поэтому они должны быть разрешены вручную. После этого будут доступны следующие события:
AppActivate - происходит сразу перед активацией главного окна приложения
AppDeactivate - происходит сразу перед деактивацией главного окна приложения
ARXLoaded - происходит при загрузке ARX-приложения
ARXUnLoaded - происходит при выгрузке ARX-приложения
BeginCommand - происходит как только начала выполняться команда, но еще не завершена.
BeginFileDrop - происходит когда файл "сброшен" в главное окно приложения
BeginLISP - происходит когда Автокад получает запрос на выполнение выражения LISP
BeginModal - происходит сразу перед появлением модального окна
BeginOpen - происходит сразу после того как Автокад получает запрос на открытие файла
BeginPlot - происходит сразу после того как Автокад получает запрос на печать
BeginQuit - происходит сразу перед тем как завершается сессия
BeginSave - происходит сразу после получения Автокадом запроса на сохранение
EndCommand - происходит сразу при завершении команды
EndLISP - происходит сразу при завершении вычисления выражения LISP
EndModal - происходит сразу после закрытия модального окна диалога
EndOpen - происходит сразу после окончания процесса открытия чертежа
EndPlot - происходит сразу после завершения отправки на принтер
EndSave - происходит сразу по завершении сохранения
LISPCancelled - происходит при отмене выражения LISP
NewDrawing - происходит сразу перед созданием чертежа
SysVarChanged - происходит когда меняется значение системной переменной
WindowChanged - происходит при изменении окна приложения
WindowMovedOrResized - происходит при перемещении или изменении размера окна приложения
ОБРАБОТКА СОБЫТИЙ УРОВНЯ ДОКУМЕНТА
События уровня документа постоянно происходят в процессе работы Автокада. Это значит, что они автоматически делаются доступными при загрузке проекта VBA, однако не доступны например для VB. То есть для других ActiveX Automation приложений их надо разрешать вручную. Доступны следующие события:
Activate - происходит в момент активации документа
BeginClose - происходит перед закрытием документа
BeginCommand - происходит сразу после начала выполнения команды, но до ее завершения
BeginDoubleClick - происходит в момент двойного щелчка мышью
BeginLISP - происходит сразу после получения Автокадом запроса на вычисление выражения LISP
BeginPlot - происходит сразу после получения Автокадом запроса на печать документа
BeginRightClick - происходит после "правого щелчка" мышью в окне документа
BeginSave - происходит сразу после получения Автокадом запроса на сохранение документа
BeginShortcutMenuCommand - происходит после "правого щелчка" мышью, но до появления всплывающего меню в режиме команд
BeginShortcutMenuDefault - происходит после "правого щелчка" мышью, но до появления всплывающего меню в режиме по-умолчанию
BeginShortcutMenuEdit - происходит после "правого щелчка" мышью, но до появления всплывающего меню в режиме редактирования
BeginShortcutMenuGrip - происходит после "правого щелчка" мышью, но до появления всплывающего меню в режиме "ручки"
BeginShortcutMenuOsnap - происходит после "правого щелчка" мышью, но до появления всплывающего меню в режиме объектной привязки
Deactivate - происходит при деактивации окна документа
EndCommand - происходит сразу после завершения команды
EndLISP - происходит при завершении вычисления выражения LISP
EndPlot - происходит после отправки документа на печать
EndSave - происходит когда окончено сохранение документа
EndShortcutMenu - происходит после появления всплывающего меню
LayoutSwitched - происходит после переключения на другой Layout
LISPCancelled - происходит когда прервано вычисление выражения LISP
ObjectAdded - происходит когда добавлен объект
ObjectErased - происходит когда удален объект
ObjectModified - происходит когда изменен объект
SelectionChanged - присходит когда изменен выбор
WindowChanged - происходит когда изменено окно документа
WindowMovedOrResized - происходит сразу после изменения размера или перемещения окна документа
Если честно, я не понял как мне использовать эти события.
А возможно ли, сделать реактор или что-то другое, на время, допустим чтоб он запускался каждые 10 сек., ну и в нем поставить обработчик положения мыша, и в случае простоя на одном месте, запускать процедуру имитирующую активность.
Можно в процедуре инициализации запомнить время начала работы в Autocad "Time1" и установить флаг активности. Далее, в реакторе надо вычесть из текущего времени "Time2" время начала работы "Time1", и если разность будет > или = 10мин,а флаг сброшен, то писать например в Exel текущее время,устанавить флаг, Time1=Time2. Если "Time2"-"Time1"< 10мин, то сбрасываем флаг. Запись в Exel будет говорить о том, что в предыдущие 10мин был выполнен реактор хотя бы один раз, т.е. 10мин работа в autocad производилась
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Макрос. Любая активность в автокаде.
Форум работает на PunBB, при поддержке Informer Technologies, Inc