Обработка команд под AutoCAD
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Обработка команд под AutoCAD

Обработка команд под AutoCAD

Ответ
Поиск в этой теме
Непрочитано 19.04.2006, 09:06 #1
Обработка команд под AutoCAD
SUN
 
программист
 
г. Донецк
Регистрация: 18.04.2006
Сообщений: 6

Здравствуйте!
Пишу на VBA. Но думаю принцип проблемы неважен.
Такая ситуация. По кнопке с панели запускаю макрос, формирующий форму (Userform). Для удобства проектирования хочу сделать, чтобы во время черчения этой формы на экране не было.
Для этого использую события AcadDocument (они же есть и в AcadApplication) AcadDocument_BeginCommand (в этом обработчике я скрываю форму Userform1.Hide) и AcadDocument_EndCommand (Userform1.Show vbModeless).
Суть проблемы. В AutoCAD-е пользователь может закончить команду 2 способами - "Подтвердить"("Enter") или "Отменить"("Cancel"). Событие EndCommand обрабатывает завершение по "Enter".
!!! Как перехватить завершение команды по "Cancel"?? Если есть такое в LISP-е - подскажите, но желательно под VBA. !!!
--------------------------------
Заранее благодарен
Руслан
Просмотров: 4274
 
Непрочитано 19.04.2006, 09:16
#2
Кочетков Андрей

Java/Kotlin/Go
 
Регистрация: 03.02.2006
Сообщений: 5,786


Я не знаю VBA, но кажется ты говоришь про реакторы?
Тогда:
Для завершения команды (vlr-command-reactor nil '((:vlr-commandEnded . endCommand)))
Для прерывания команды (vlr-command-reactor nil '((:vlr-commandCancelled . cancelCommand)))
Как переделать это в VBA я не знаю!
Кочетков Андрей вне форума  
 
Непрочитано 19.04.2006, 10:30
#3
Zouss


 
Регистрация: 14.03.2006
Сообщений: 863


в чистом LISPe в программе определяется стандартная функция (defun *error*... которая срабатывает при аварийном завершении программы, в т.ч. и по нажатию Esc. Для полноты картины можно в этой функции добавить обработку кода ошибки, например
Код:
[Выделить все]
(if (= (getvar "errno") 77) (princ "Incompatible version number"))
а в VBA я не силен, нашел только событие LispCancelled может поможет?
Zouss вне форума  
 
Автор темы   Непрочитано 19.04.2006, 13:02
#4
SUN

программист
 
Регистрация: 18.04.2006
г. Донецк
Сообщений: 6
<phrase 1=


Спасибо за сочуствие....
Цитата:
Сообщение от Кочетков Андрей
Я не знаю VBA, но кажется ты говоришь про реакторы?
Может они так в Лиспе и называются, но в принципе это события, которые инициируются при выполнении каких-либо действий...
Неохота писать на Лиспе, т.к. я его почти не знаю, синтаксис для меня запутанный да и для планируемого набора форм думаю мало подходит. Остается два варианта - либо найти аналогичные события/реакторы под VBA, либо прикрутить лисповые реакторы к VBA. Как можно организовать последнее, не подскажешь?

Цитата:
Сообщение от Zouss
нашел только событие LispCancelled может поможет?
Я тоже ничего кроме этого не нашел, но это событие не то. Оно вроде срабатывает когда лисповый код прерывается...
-------------------
Руслан
SUN вне форума  
 
Непрочитано 19.04.2006, 13:24
#5
Кочетков Андрей

Java/Kotlin/Go
 
Регистрация: 03.02.2006
Сообщений: 5,786


Я к сожалению этого не знаю.
Подожди пока наши гуры программистские не прочитают этой темы
Кочетков Андрей вне форума  
 
Непрочитано 19.04.2006, 13:44
#6
Zouss


 
Регистрация: 14.03.2006
Сообщений: 863


а еще я нашел KeyPress Event (Cancel команды пользователем в акаде ведь ctrl+С фактически?), только как его прикручивать не знаю
Zouss вне форума  
 
Автор темы   Непрочитано 19.04.2006, 15:52
#7
SUN

программист
 
Регистрация: 18.04.2006
г. Донецк
Сообщений: 6
<phrase 1=


Цитата:
Сообщение от Zouss
а еще я нашел KeyPress Event
Это в каком объекте? Если в UserForm - то нет смысла, так как она будет спрятана......А если в объекте AutoCAD.....
---------------------
С надеждой в голосе....
Руслан
SUN вне форума  
 
Непрочитано 19.04.2006, 16:47
#8
VetalBY


 
Регистрация: 16.05.2005
г. Минск
Сообщений: 276


в VBA тоже есть обработка ошибок вроде
может быть надо смотреть в направлении ThisDrawing.Utility.GetInput?
(к сожалению на VBA не программирую)
пример из хелпа

Код:
[Выделить все]
Sub Example_GetInput()
    ' This example prompts for user input of a point. By using the
    ' InitializeUserInput method to define a keyword list, it can also
    ' return keywords entered by the user.
    
    On Error Resume Next
    
    ' Define the valid keywords
    Dim keywordList As String
    keywordList = "Keyword1 Keyword2"
    
    ' Call InitializeUserInput to setup the keywords
    ThisDrawing.Utility.InitializeUserInput 128, keywordList
    
    ' Get the user input
    Dim returnPnt As Variant
    returnPnt = ThisDrawing.Utility.GetPoint(, "Enter a point(Keyword1, Keyword2): ")
    If Err Then
         If StrComp(Err.Description, "User input is a keyword", 1) = 0 Then
         ' One of the keywords was entered
             Dim inputString As String
             Err.Clear
             inputString = ThisDrawing.Utility.GetInput
             MsgBox "You entered the keyword: " & inputString
         Else
             MsgBox "Error selecting the point: " & Err.Description
             Err.Clear
         End If
    Else
        ' Display point coordinates
        MsgBox "The WCS of the point is: " & returnPnt(0) & ", " & returnPnt(1) & ", " & returnPnt(2), , "GetInput Example"
    End If
    
End Sub
VetalBY вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Обработка команд под AutoCAD