Показать сообщение отдельно
Старый 20.06.2008, 16:01   #28  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Хотелось бы с автором AxAssist, а также с остальными участниками поделится ещё одним способом отлова объекта Editor. Суть его заключается в использовании стандартной формы SysEditorGotoLine, которая вызывается при правке кода нажатием Ctrl+G и в которую kernel передаёт объект Editor’а.
1. Итак, каждый раз, когда мы хотим получить Editor, мы посылаем активному редактору WinMsg аналогичное нажатию Ctrl+G, после чего у нас активизируется форма sysEditorGotoLine, с уже переданным туда объектом Editor, где мы, собственно его и получаем.
2. Конечно же, видеть форму SysEditorGotoLine нам не нужно, да и ломать её не хочется. Решение – создать класс – наследник от FormRun, у которого убрать вызовы super() в методах init(), run(). Добавить методы, которые вызываются kernel’ем при использовании оригинальной формы: editor(), showForm(). В этом классе и будет жить наш editor, c которым мы можем что-нибудь делать.
3. Далее остается только заставить систему думать, что наш класс – это форма SysEditorGotoLine. Делается это в классе ClassFactory\formRunClassOnClient, - точка входа для старта всех форм в Axapta(в идеале ), в которую в объекте Args передается имя формы, которая стартует. Здесь мы и возвращаем не стандартный new SysSetupFormRun(), а new НашКласс(), по условию: _args.name() = formstr(SysEditorGotoLine);

Данная функциональность проверена и работоспособна. Написано для реализации дополнительных HotKeys при написании кода. Есть правда один недостаток – мы лишаемся формы SysEditorGotoLine, но за всю свою практику мне не пришлось ею воспользоваться ни разу. Достоинство – изменение только одной строки в стандартном методе ClassFactory\formRunClassOnClient. Этот подход должен избавить от необходимости правки методов класса EditorScripts для AxAssist.

Надеюсь - это пригодится.
Вложения
Тип файла: xpo Class_AxEditorGotoLine.xpo (1.3 Кб, 320 просмотров)
За это сообщение автора поблагодарили: aidsua (1), Alex_KD (1), alex55 (1), nano3 (1).