Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: xSAKABSx от 27-08-2014, 12:59:10

Название: События вызова,отмены,ошибки,завершение для своих команд
Отправлено: xSAKABSx от 27-08-2014, 12:59:10
Есть команда которая вызывает модальное окно,
как сделать так чтоб при закрытии окна с помощью крестика или кнопки "Отмена" было вызвано событие Document.CommandCancelled а не Document.CommandEnded
Название: Re: События вызова,отмены,ошибки,завершение для своих команд
Отправлено: Александр Ривилис от 27-08-2014, 14:15:29
1. Ты имеешь в виду команду, которую ты написал при помощи .NET ?
2. Объясни зачем это нужно.
Название: Re: События вызова,отмены,ошибки,завершение для своих команд
Отправлено: xSAKABSx от 27-08-2014, 15:15:05
Александр, приветствую.

Да команда на .net
Тут встал вопрос о ведение логов использования команд проектировщиками, при помощи стандартных средств System.Diagnostics.EventLog.
И чтобы не дописывать команды, я решил отслеживать их по событию Document.CommandEnded
Просто не честно писать в лог команду если она в итоге не отработала, а была прервана.

Название: Re: События вызова,отмены,ошибки,завершение для своих команд
Отправлено: Александр Ривилис от 27-08-2014, 18:14:07
Хм. Интересный вопрос. Боюсь, что средствами .NET этого сделать нельзя. Начиная с AutoCAD 2013 есть недокументированная функция acedSendCommandCancelled, а до того ничего подобного я не нашел.
Название: Re: События вызова,отмены,ошибки,завершение для своих команд
Отправлено: Александр Ривилис от 27-08-2014, 18:19:26
Кстати есть еще и событие commandFailed
Название: Re: События вызова,отмены,ошибки,завершение для своих команд
Отправлено: Александр Ривилис от 27-08-2014, 18:47:24
Еще немного поковырявшись в мозгах я придумал такой вариант:
Код - C# [Выбрать]
  1. [CommandMethod("TestCancel")]
  2. public void TestCancel()
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   Editor ed = doc.Editor;
  6.   doc.SendStringToExecute("\x03",false,false,false);
  7.   ed.GetPoint("");
  8. }
Проверял его работоспособность только в AutoCAD 2014, хотя в принципе должно работать во всех версиях. Немного нервирует сообщение *Cancel* в командной строке, но раз уж ты так решил издеваться над AutoCAD, то придется потерпеть.
Название: Re: События вызова,отмены,ошибки,завершение для своих команд
Отправлено: xSAKABSx от 28-08-2014, 12:14:16
Александр Ривилис,
по поводу commandfailed мне тоже интересно;
по поводу прерывания команды , у текстовых команд с этим проблем нету =),
ну а у родных команд автокада которые вызывают любые окна тоже самое  что и у меня ,  вызвал окно вот тебе команда закончена =)
Название: Re: События вызова,отмены,ошибки,завершение для своих команд
Отправлено: Александр Ривилис от 28-08-2014, 12:17:49
по поводу прерывания команды , у текстовых команд с этим проблем нету =),
Тот код, который я дал ты можешь запустить после закрытия окна и CommandCancelled обеспечена.
ну а у родных команд автокада которые вызывают любые окна тоже самое  что и у меня ,  вызвал окно вот тебе команда закончена =)
Переведи. Я не понял что ты имеешь в виду.
Название: Re: События вызова,отмены,ошибки,завершение для своих команд
Отправлено: xSAKABSx от 28-08-2014, 16:56:27
Переведи. Я не понял что ты имеешь в виду.
Любые команды автокада, которые вызывают модальные окна(style например),
при любом исходе событий то есть,
было ли просто закрыто окно, или нажата  кнопка отмены,
все равно вызывает событие commandEnded , хотя по идее должно быть commandCancelled
 
Название: Re: События вызова,отмены,ошибки,завершение для своих команд
Отправлено: Александр Ривилис от 28-08-2014, 17:00:52
А! Ты об этом. Ну вообще-то событие commandCancelled возникает только при нажатии ESC, о чем в документации четко сказано.