|
30.05.2008, 16:51 | #1 |
Участник
|
Цитата:
В тулбаре ничего не изменилось. Захожу в метод showScripts появились кнопки. Похоже закэшировался Editor. Закрываю форму кнопки остались. Так а смысл то в чём. Какая практическая ценность таких телодвижений. Изначально я думал открываешь форму на ней кнопки. |
|
30.05.2008, 17:05 | #2 |
Участник
|
Цитата:
С данной задачей форма справляется.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
20.06.2008, 16:01 | #3 |
Боец
|
Хотелось бы с автором 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. Надеюсь - это пригодится. |
|
|
За это сообщение автора поблагодарили: aidsua (1), Alex_KD (1), alex55 (1), nano3 (1). |
23.06.2008, 13:12 | #4 |
Участник
|
Цитата:
Есть правда один недостаток...
Данная методика в AxAssist работает - работоспособность стандартного меню по ALT+M не нарушается. Думаю этот вариант как альтернатива. Идеально было бы вообще не трогая стандартный ф-л получить Editor e. В любом случае - спасибо
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
23.06.2008, 22:50 | #5 |
Administrator
|
Цитата:
Эта "одна" строчка задевает системный класс Classfactory. А правка системных классов - куда более опасна и напряжна с т.з. дальнейшей поддержки приложения. Если не будет компилироваться один из системных классов (Info, Application, Classfactory) - то есть шанс вообще не запустить приложение. В то же время - ошибки в EditorScripts не будут настолько критичны для запуска приложения. Поэтому уменьшение кол-во правок в предлагаемой альтернативе - на самом деле (с моей т.з.) наоброт - более опасно, нежели модификация EditorScripts. Те же слова можно сказать при попытке правки класса SysSetupFormRun, т.к. он инициализируется для каждой формы.
__________________
Возможно сделать все. Вопрос времени |
|
31.08.2009, 12:19 | #6 |
Участник
|
Цитата:
Сообщение от DSPIC
2. Конечно же, видеть форму SysEditorGotoLine нам не нужно, да и ломать её не хочется. Решение – создать класс – наследник от FormRun, у которого убрать вызовы super() в методах init(), run(). Добавить методы, которые вызываются kernel’ем при использовании оригинальной формы: editor(), showForm(). В этом классе и будет жить наш editor, c которым мы можем что-нибудь делать.
Есть правда один недостаток – мы лишаемся формы SysEditorGotoLine, но за всю свою практику мне не пришлось ею воспользоваться ни разу. Достоинство – изменение только одной строки в стандартном методе ClassFactory\formRunClassOnClient. Этот подход должен избавить от необходимости правки методов класса EditorScripts для AxAssist. Надеюсь - это пригодится. ЗЫ Я editor храню в infolog, как где-то тут описано было. ClassFactory не менял. Последний раз редактировалось Denicce; 31.08.2009 в 12:21. |
|
31.08.2009, 13:25 | #7 |
Боец
|
Цитата:
Сообщение от Denicce
можно и не лишаться формы. Я через globalCache() храню признак запуска Alt+M из класса-плугина Табакса и анализирую его в EditorScripts.getApplicableScripts(). Если вкл., то тут же return, иначе - стандартная обработка. Думаю, аналогично и в случае формы перехода к строке можно сделать.
ЗЫ Я editor храню в infolog, как где-то тут описано было. ClassFactory не менял.
|
|
Теги |
download, editor script, полезное, axapta |
|
|