AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.05.2008, 16:00   #21  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от miklenew Посмотреть сообщение
А причём здесь axassist я спрашиваю про AxEditor. Выложенный здесь проект он работает или нет. И подочто. Я под Ax 3.0 sp1 пробовал.
Притом что это он и есть. Только жутко древний.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 30.05.2008, 16:05   #22  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Притом что это он и есть. Только жутко древний.
Да ничего я не возрожаю, что он древний. Мне больше интересно он работает или нет. Или люди плюсы поставили не пробуя его.
Если он не работает, то чё он тогда в базе знаний делает.
Старый 30.05.2008, 16:21   #23  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Да, работает.
Закройте все клиенты.
Запустите reg.bat.
Попробуйте перекомпилировать все обьекты к нему относящиеся.
Проверьте EditorScripts класс - дописали ли вы там метод showScripts.

Должно сработать. Проект для 3ки.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 30.05.2008, 16:33   #24  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Ну вот появляется формочку пустая.
В showScripts пробовал и
X++:
    if(AxAssistSingleton::getThisClass().parmAltMEmulate())
    {
      AxAssistSingleton::getThisClass().parmEditor(e);
      AxAssistSingleton::getThisClass().parmAltMEmulate(false);
    return;
    }
и так
X++:
    if(AxAssistSingleton::getThisClass().parmAltMEmulate())
    {
      AxAssistSingleton::getThisClass().parmEditor(e);
    return;
    }
не работает. Я так понимаю на этой форме должны появиться кнопки коментарить/раскоментарить. Но всё пусто.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.JPG
Просмотров: 395
Размер:	104.3 Кб
ID:	3490  
Старый 30.05.2008, 16:39   #25  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Компонент регистрировали ДО этого? С закрыванием Аксы.
Попробуйте работает ли ActiveX Explorer.

Должно быть так (тулбар в эдиторе):
Изображения
 
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 30.05.2008, 16:51   #26  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Компонент регистрировали ДО этого? С закрыванием Аксы.
Попробуйте работает ли ActiveX Explorer.
Должно быть так (тулбар в эдиторе):
Открываю форму.
В тулбаре ничего не изменилось.
Захожу в метод showScripts появились кнопки. Похоже закэшировался Editor.
Закрываю форму кнопки остались.
Так а смысл то в чём.
Какая практическая ценность таких телодвижений.
Изначально я думал открываешь форму на ней кнопки.
Старый 30.05.2008, 17:05   #27  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от miklenew Посмотреть сообщение
Открываю форму.
В тулбаре ничего не изменилось.
Захожу в метод showScripts появились кнопки. Похоже закэшировался Editor.
Закрываю форму кнопки остались.
Так а смысл то в чём.
Какая практическая ценность таких телодвижений.
Изначально я думал открываешь форму на ней кнопки.
Ценность написана в названии темы (как получит Editor e). Не более того.
С данной задачей форма справляется.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 20.06.2008, 16:01   #28  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (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 Кб, 321 просмотров)
За это сообщение автора поблагодарили: aidsua (1), Alex_KD (1), alex55 (1), nano3 (1).
Старый 23.06.2008, 13:12   #29  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Есть правда один недостаток...
Его можно обойти, если перед вызовом Ctrl+G ставить некий глобальный флаг в true, а после "отлова" Editor e ставить в false. В самой же ClassFactory\formRunClassOnClient проверять этот флаг.
Данная методика в AxAssist работает - работоспособность стандартного меню по ALT+M не нарушается.

Думаю этот вариант как альтернатива. Идеально было бы вообще не трогая стандартный ф-л получить Editor e.
В любом случае - спасибо
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 23.06.2008, 22:50   #30  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,317 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Хотелось бы с автором AxAssist, а также с остальными участниками поделится ещё одним способом отлова объекта Editor.
Для начала - хорошая идея с т.з. альтернативы, однако не могу не вставить немножко ложки дегтя.
Эта "одна" строчка задевает системный класс Classfactory.
А правка системных классов - куда более опасна и напряжна с т.з. дальнейшей поддержки приложения.
Если не будет компилироваться один из системных классов (Info, Application, Classfactory) - то есть шанс вообще не запустить приложение.
В то же время - ошибки в EditorScripts не будут настолько критичны для запуска приложения. Поэтому уменьшение кол-во правок в предлагаемой альтернативе - на самом деле (с моей т.з.) наоброт - более опасно, нежели модификация EditorScripts.

Те же слова можно сказать при попытке правки класса SysSetupFormRun, т.к. он инициализируется для каждой формы.
__________________
Возможно сделать все. Вопрос времени
Старый 24.06.2008, 12:26   #31  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
А правка системных классов - куда более опасна и напряжна с т.з. дальнейшей поддержки приложения.
Вся правка заключается в добавлении 2х строк в Classfactory:
X++:
if( args.name() = formstr(SysEditorGotoLine))
return new ()
это единственная модификация стандартных элементов (про модификацию SysSetupFormRun речь не шла) Тут сложно что-то поломать.
Ну а вообще, если у разработчика будут кривые руки, то тут уж "против лома нет приема..."
Старый 26.06.2008, 16:48   #32  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Идеально было бы вообще не трогая стандартный ф-л получить Editor e.
И так можно, если опустить моральный аспект подхода.
Пропатчить клиентский файл Ax32.exe: Открыть его в HEX редакторе, найти имя формы в формате Unicode "SysEditorGotoLine" и заменить на ту что нам нужно. (только длина имени должна остаться такой же). Ещё как идея, если хватит ума, и если возможно, то же самое сделать динамически с образом этого ехe в памяти. Но стоит ли овчинка выделки...
Старый 26.06.2008, 16:59   #33  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от DSPIC Посмотреть сообщение
И так можно, если опустить моральный аспект подхода.
Пропатчить клиентский файл Ax32.exe: Открыть его в HEX редакторе, найти имя формы в формате Unicode "SysEditorGotoLine" и заменить на ту что нам нужно. (только длина имени должна остаться такой же). Ещё как идея, если хватит ума, и если возможно, то же самое сделать динамически с образом этого ехe в памяти. Но стоит ли овчинка выделки...
В экзашники не будет никаких форм.
И потом это противоречит лицензионным условиям.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 26.06.2008, 17:06   #34  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
И потом это противоречит лицензионным условиям.
True
Цитата:
В экзашники не будет никаких форм.
false
Старый 31.08.2009, 12:19   #35  
Denicce is offline
Denicce
Участник
 
62 / 54 (2) ++++
Регистрация: 22.03.2005
Адрес: Москва
Цитата:
Сообщение от DSPIC Посмотреть сообщение
2. Конечно же, видеть форму SysEditorGotoLine нам не нужно, да и ломать её не хочется. Решение – создать класс – наследник от FormRun, у которого убрать вызовы super() в методах init(), run(). Добавить методы, которые вызываются kernel’ем при использовании оригинальной формы: editor(), showForm(). В этом классе и будет жить наш editor, c которым мы можем что-нибудь делать.

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

Надеюсь - это пригодится.
можно и не лишаться формы. Я через globalCache() храню признак запуска Alt+M из класса-плугина Табакса и анализирую его в EditorScripts.getApplicableScripts(). Если вкл., то тут же return, иначе - стандартная обработка. Думаю, аналогично и в случае формы перехода к строке можно сделать.

ЗЫ
Я editor храню в infolog, как где-то тут описано было. ClassFactory не менял.

Последний раз редактировалось Denicce; 31.08.2009 в 12:21.
Старый 31.08.2009, 13:25   #36  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Denicce Посмотреть сообщение
можно и не лишаться формы. Я через globalCache() храню признак запуска Alt+M из класса-плугина Табакса и анализирую его в EditorScripts.getApplicableScripts(). Если вкл., то тут же return, иначе - стандартная обработка. Думаю, аналогично и в случае формы перехода к строке можно сделать.

ЗЫ
Я editor храню в infolog, как где-то тут описано было. ClassFactory не менял.
Ну понятно. Вы пошли по пути AxAssist, в этом случае ClassFactory менять незачем. По сути, разницы нет. Я просто хотел отметить, что пока известны (мне) два способа отлова Editor:
  1. Через EditorScripts и метод getApplicableScripts()
  2. Через ClassFactory, переопределяя форму "SysEditorGotoLine"
Что касается SysEditorGotoLine, то да, формы можно не лишаться, используя флаг. Но ввиду её неприменимости (мною) я этого не делал.
Старый 03.11.2009, 13:04   #37  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Цитата:
Сообщение от alex55 Посмотреть сообщение
Можно ли программно (из кода Аксапты) получить экземпляр текущего Editor (окна с кодом)?
Задача состоит в выполнении с Editor некоторых действий (посредством AxGoToDeclaration) при нажатии UserDefined кнопки в Tabax.

Axapta 3.0 sp4
я делал вот так
все было это сделано для класса который постоянно торчит в памяти и при нажатию на нек. кнопку вставляет в код комментарий с именем пользователя и датой
X++:
void sendMessage()
{
#WinAPI
int i=infolog.hWnd();
;
i = WinAPI::findWindowEx(i,0,"MDIClient","");
i = WinAPI::findWindowEx(i,0,"AxMDIChildWindow","");
i = WinAPI::findWindowEx(i,0,"AxEdTabCtrl","");
i = WinAPI::findWindowEx(i,0,"AxPaneWnd","");
WinAPI::sendMessageEx(i,#WM_SYSKEYDOWN,0x4D,0x20320001);
WinAPI::sendMessageEx(i,#WM_SYSCHAR,0x6D,0x20320001);
WinAPI::sendMessageEx(i,#WM_SYSKEYUP,0x4D,0xF0320001);
}
void sendMessageEscMessage()
{
#WinAPI
int i=infolog.hWnd();
;
i = WinAPI::findWindowEx(i,0,"MDIClient","");
i = WinAPI::findWindowEx(i,0,"AxMDIChildWindow","");
i = WinAPI::findWindowEx(i,0,"AxEdTabCtrl","");
i = WinAPI::findWindowEx(i,0,"AxPaneWnd","");
WinAPI::sendMessageEx(i,0x7EE,0,0x00CA00E0);
}
В классе EditorScripts в методе container getApplicableScripts(Editor e) записывал значение e - в глобальную переменную
infolog.globalCache.set()

Последний раз редактировалось Murlin; 03.11.2009 в 13:07.
За это сообщение автора поблагодарили: alex55 (1).
Теги
download, editor script, полезное, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: Editor scripts OpenOverriddenMethodDef Blog bot DAX Blogs 0 14.08.2008 02:27
adkotov: Axapta Editor - Suggestions, Autotext, Hotkeys Blog bot DAX Blogs 39 12.02.2008 19:13
casperkamal: Using Editor Scripts Blog bot DAX Blogs 0 20.12.2006 12:50
WebComboBox - получение текущего значения IvanS DAX: Программирование 0 27.11.2006 14:58
Получение текущего списка Range'ей TasmanianDevil DAX: Программирование 4 02.02.2006 09:21
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:24.