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

ADN Club => ObjectARX => Тема начата: Baton от 06-11-2020, 23:20:09

Название: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Baton от 06-11-2020, 23:20:09
Есть еще вопрос:
Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды, которая в этот момент запущена в командной строке Автокада? Если новая команда запускается через меню, то в строке меню перед именем команды ставится ^C^C. В sendStringToExecute это не работает.
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Baton от 06-11-2020, 23:52:48
Сам нашел ответ - запуск в строку символа Escape:
acDocManagerPtr()->sendStringToExecute(curDoc(), ACRX_T("\x1b"));
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Александр Ривилис от 06-11-2020, 23:56:45
Сам нашел ответ - запуск в строку символа Escape:
acDocManagerPtr()->sendStringToExecute(curDoc(), ACRX_T("\x1b"));

Обычно нужно двойной ESCAPE
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Baton от 07-11-2020, 00:07:46
Обычно нужно двойной ESCAPE
Почему двойной? Вроде выход из любой команды через один получается.
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Александр Ривилис от 07-11-2020, 00:20:22
очему двойной? Вроде выход из любой команды через один получается.
Не из любой. Поэтому в меню и ^C^C, что эквивалентно acDocManagerPtr()->sendStringToExecute(curDoc(), ACRX_T("\x1b\x1b"));
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Александр Ривилис от 07-11-2020, 00:29:42
Кстати, с давних времен (начиная с AutoCAD 2007) есть недокументированная функция:
Код - C++ [Выбрать]
  1. enum Acad::ErrorStatus __cdecl acedSendMenuStringToExecute(class AcApDocument *doc, wchar_t const * menuString, bool bEchoString);
Так что вызов может выглядеть так:
Код - C++ [Выбрать]
  1. acedSendMenuStringToExecute(curDoc(), L"^C^Cтвоя_команда ", false);
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Baton от 07-11-2020, 00:36:01
acedSendMenuStringToExecute
Не могу найти такую функцию. По заголовочным файлам не получается найти. Visual Studio ее не находит.
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Александр Ривилис от 07-11-2020, 00:41:55
acedSendMenuStringToExecute
Не могу найти такую функцию. По заголовочным файлам не получается найти. Visual Studio ее не находит.
Поэтому я и сказал, что она недокументированная. Она в acad.lib в версиях до 2012 включительно и в accore.lib начиная с 2013
Достаточно вставить то объявление, которое я указал выше.
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Baton от 07-11-2020, 00:45:34
Достаточно вставить то объявление, которое я указал выше.
Извините, может я глупый вопрос задаю, но вставить объявление функции надо куда?
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Baton от 07-11-2020, 00:52:05
Извините, разобрался сам. Глюканул вечером :).
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Baton от 07-11-2020, 00:55:18
acedSendMenuStringToExecute(curDoc(), L"^C^Cтвоя_команда ", false);
работает. Большое спасибо за советы.
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Александр Ривилис от 07-11-2020, 00:56:56
Извините, разобрался сам. Глюканул вечером :).
Во! Достаточно мне отвлечься на другие дела, как ответ сам нашелся. :)
Название: Re: Как перед запуском команды через AcApDocManager::sendStringToExecute осуществить прерывание команды
Отправлено: Baton от 07-11-2020, 01:03:27
Еще раз спасибо. Удачи и здоровья!