![]() |
#27 |
Боец
|
Хотелось бы с автором 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(в идеале ![]() Данная функциональность проверена и работоспособна. Написано для реализации дополнительных HotKeys при написании кода. Есть правда один недостаток – мы лишаемся формы SysEditorGotoLine, но за всю свою практику мне не пришлось ею воспользоваться ни разу. Достоинство – изменение только одной строки в стандартном методе ClassFactory\formRunClassOnClient. Этот подход должен избавить от необходимости правки методов класса EditorScripts для AxAssist. Надеюсь - это пригодится. ![]() |
|
|
За это сообщение автора поблагодарили: aidsua (1), Alex_KD (1), alex55 (1), nano3 (1). |
Теги |
download, editor script, полезное, axapta |
|
|