По нарушению контекста.
Проблема, как всегда, оказалась рядом.
Текущая схема такая:
В нормальных условиях при запуске обработки из документа по кнопке или из меню СЗ процедуры отрабатывают в следующем порядке:
Цитата:ПриНажатииЛевойКнопки - форма1
ПриОтжатииЛевойКнопки - форма1
ПриИзмененииРазмераОкна - форма2
ПослеСозданияФормы -форма2
ПослеОткрытия - форма2
ПриДвиженииМыши - форма1
ПриДвиженииМыши - форма1
При запуске же через Сервис::ВыбратьЗначение() паразитные хуки ПриДвиженииМыши в форме1 не отрабатываются.
В итоге, callback не может удалять строки.
То же самое происходит, если закомментировать хук "ПриДвиженииМыши" -
все варианты вызова обработчика будут обламываться с удалением строк.
До тех пор, пока не будет вызвана любая функция в _CallModuleProc() в контексте форма1 (например. по щелчку мыши или по движению, если хук не закомментарен).
Тогда начинают работать все методы вызова, в том числе и из меню.
То же самое, когда мы раскомментариваем вызовы "ПослеОбновленияФормы".
В итоге, думаю, вся причина вот в этом полезном коде в _CallModuleProc():
Цитата:for(int i = 0; i<pCont->GetSize(); i++)
{
pCont0 = pCont->GetContext(i);
if(!strcmp(pCont0->GetRuntimeClass()->m_lpszClassName,"CDocContext"))
((CDocContext*)pCont0)->SetEnableNewLine(1);
}
alf, придумай, плз, как грамотно его вызвать в контексте
вызывающей формы после запуска вызываемой формы.
P.S. С этим, видимо, связана и нестабильность появления проблемы:
при разном положении форм, иногда у меня отрабатывались хуки на "ПриДвиженииМыши" в вызывающей форме, а иногда нет.
Если привильно сделать принудительный SetEnableNewLine(1), все будет работать стабильно.
Возможное решение мной уже приведено в начальных постах.