Тема: Вызов одной команды из другой

Ой, попытаюсь объяснить проблему. Есть две команды: отрисовка и настройки.
Начнем с "Настройки".
Открывается диалог, в котором человек задает настройки рисования. Также есть кнопочка для перехода в окно акада для указания длины. код ее такой:

// выбор из окна акада
double newHeight;
BeginEditorCommand();
if (RTNORM == acedGetDist(NULL, _T("\nНовая высота текста: "), &newHeight))
{
// Dbl2Str(newHeight,2) - перегоняет из double в std::цыекштп в данном случае точность - 2 знака после запятой
  m_edtHeight.SetWindowText(Dbl2Str(newHeight,2).c_str());// пишем все в EDITBOX
}
CompleteEditorCommand();

сама по себе команда работает замечательно!!!

Команда "Отрисовка".
Выбираются объекты с окна акада, потом идет раздвоение - отрисовка или настройки.
Если выбран вариант отрисовка, то происходят какие-то действия в акаде и всё заканчивается благополучно :)
Если выбрали вариант "Настройки", то срабатывает код:

acedCommand (RTSTR, _T("настройки"),0); // естественно название команды на английском. тут написал по-русски, чтоб было понятней

Окно открывается, все настройки, какие есть, замечательно меняются. кроме той, которая связана с переходом в окно акада для выбора длины(высоты текста). Окно настроек гасится, но в строке акада не появляется запрос на новую длину :(

В чем может быть пробема?
P.S.:
параметры команды отрисовка: ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET | ACRX_CMD_REDRAW
параметры команды настройки: ACRX_CMD_TRANSPARENT | ACRX_CMD_NOHISTORY

Re: Вызов одной команды из другой

Николай пишет:

Окно настроек гасится, но в строке акада не появляется запрос на новую длину smile:(

Ресурсы не переключаются?

Re: Вызов одной команды из другой

не. с ресурсами все ок. иначее б окно вообще не появлялось.
окно гасится, но кажись продолжает работать команда отрисовки, а не вызванная мной команда "настройки", т.к. если нажать Esc, то команда отрисовки как-бы заканчивается и тогда появляется запрос на ввод расстояния :(. ну и после выхода из этого окна - команда закончена (ECS то я нажал), а не зациклена до тех пор, пока не будет выбрано рисование или отмена.
может тут какая-то ерунда именно с контекстом команды "настройки". может ее сделать для контекста приложения?

Re: Вызов одной команды из другой

еще интересный момент. добавил строку с выводом текста по окончании команды.

acedCommand (RTSTR, _T("настройки"),0);
acutPrintf(_T("\nкоманда закончена\n"));

так вот. команда заканчивается если:
1. закрываю окно кропками OK \ CANCEL
2. нажимаю на кнопку для указания длины в окне акада.

Re: Вызов одной команды из другой

Николай пишет:

может тут какая-то ерунда именно с контекстом команды "настройки". может ее сделать для контекста приложения?

Может её вообще не делать командой, а вызвать функцию?!

Re: Вызов одной команды из другой

Может её вообще не делать командой, а вызвать функцию?!

Да так то оно конечно можно, только эта ерунда будет в 5-6 проектах разных (типа нада сделать, чтоб везде было одинаково :)), а значит мне придется в каждом из них лепить этот диалог, подключать кучу файлов, чтоб все работало. геморойно это :)
хочется обойтись малой кровью.

Re: Вызов одной команды из другой

появились новости :)
acedCommand хоть и работает синхронно, но это еще не значит, что следующая строка исходного кода выполнится после того, как acedCommand полностью закончит работу. м-да :), вот такая ... синхронность.
следовательно, нужно притормаживать эту штуку руцями :)
выглядит это так:

struct resbuf rb;
acedGetVar(_T("CMDNAMES"), &rb);
CString cmd_ok( rb.resval.rstring );
if ( acedCommand (RTSTR, _T("настройки"),0) == RTNORM )
{
   while( true )
   {
      acedGetVar(_T("CMDNAMES"), &rb);
      CString cmd_now( rb.resval.rstring );
      if ( cmd_ok != cmd_now )
      {
         acedCommand(RTSTR, PAUSE, 0);
      }
      else break;
   }
}
acutPrintf(_T("\nкоманда закончена\n"));

и как уж здась повелось :):):) новая проблема.
в данном случае все срабатывает, возможность указывать точки есть.
правда нет самой строки, которая б сказала пользователю, что от него хочет программа  :o  :o  :o
хотя если вставить acutPrintf, то его строка в командной строке отображается. не выводятся только те строки, которые идут в функциях пользовательского ввода (acedGetXXX).

Re: Вызов одной команды из другой

1. Честно говоря я был уверен, что команда "настройки" у тебя не требует дополнительного ввода. Такое мне даже в голову не могло прийти.
2. Попробуй вызвать acedPostCommandPrompt() перед acedGetXXX

Re: Вызов одной команды из другой

Честно говоря я был уверен, что команда "настройки" у тебя не требует дополнительного ввода. Такое мне даже в голову не могло прийти.

ну как-бы в первом посте самый первый кусок кода - это обработка нажатия на кнопку, которая находится в окне настроек, т.е. в команде "настройки", так что тут я ничего не скрывал :):):)

Попробуй вызвать acedPostCommandPrompt() перед acedGetXXX

попробовал. увы, чуда не случилось.
я оставил acutPrintf со строкой из acedGetDist, а в самой acedGetDist поставил пустую строку. так что разница между стандартным вариантом и получившемся, только в сообщении "Вторая точка:". это меня вполне устраивает. можно конечно изловчится и пойти обходным путем через acedGetPoint, но лень. да и не оценят этого :):):) пользователи. они ввобще не читают что хочет от них автокад  :D

Так что наверное все. Спасибо за помощь. Скорей всего этот глюк никогда никто не исправит в автодеске, но теперь есть обходной путь :D  :D  :D