|  03.08.2009, 00:21 | #1 | 
| Боец | HK Framework 
			
			Содержание: 
 HK Framework - что это такое: 
 Как пользоваться: В тексте буду использовать сокращение HK (Hot key или Горячая клавиша). Комбинации HK настраивается в форме HKSetup. По-умолчанию, форма вызывается нажатием "Ctrl + ~", либо запуском класса HKManager прямо из АОТ. Описание полей формы: 
 Как добавить новый HK: 
 * - под запуском таблицы понимается открытие её в обозревателе. ** - примеры методов-обработчиков можно посмотреть в умомянутых классах. *** - Форма HKSetup представляет собой диалог, поэтому все изменения вступают в силу только после нажатия "OK". Базовая комплектация HK Framework: Для удобства, существующую функциональность, уже входящую в состав HK Framework буду называть плагинами. 
 Все HK, приведенные в описаниях плагинов можно переназначить в на уровне пользовательского интерфейса в форме HKSetup. Самое главное - запомнить одну горячую клавишу - "Ctrl+~". По ней откроется форма HKSetup, где всегда можно увидеть весь список HK. Недостатки: - HK Framework не использует внешние компоненты (DLL, ActiveX). Вследствие этого, он не перекрывает стандартные горячие клавиши. Т.е. если Вы назначите какой-то HK, который пересекается со стандартным, то стандартный HK отработает параллельно. Это накладывает ограничение на набор возможных комбинаций клавиш, который вы захотите использовать. Некоторые комбинации клавиш вообще не работают. Например, любая комбинация с клавишей ALT в редакторе X++ не работает (удобно использовать Ctrl). В общем, к процессу назначения новой горячей клавиши нужно подойти творчески  - детектирование комбинации клавиш несколько отличается от стандартного перехвата. Здесь важен момент одновременного нажатия клавиш, в то время как в стандарте достаточно быстрой последовательности нажатия. Поэтому для некоторых пользователей чувствительность может показаться недостаточной. Инсталляция: Данная версия тестировалась на DAX 4.0, 5.0. Для 3-ки нужно чуть подпилить. В скором времени адаптирую. Инсталляция очень проста - две простых модификации стандартных методов: \Classes\ClassFactory\formRunClassOnClient: X++: client static FormRun formRunClassOnClient(Args args) { SysSetupFormRun sysSetupFormRun; ; // HK "Hot key framework", evo 30.07.2009 --> if (args && args.name() == formstr(SysEditorGotoLine)) { return HKManager::editorCatchObject(args); } // HK "Hot key framework", evo 30.07.2009 <-- sysSetupFormRun = SysSetupFormRun::construct(args); return sysSetupFormRun; } X++: client static FormRun formRunClassOnClient(Args args) { SysSetupFormRun sysSetupFormRun; ; // HK "Hot key framework", evo 30.07.2009 --> if (args && args.name() == formstr(SysEditorGotoLine)) { return HKManager::editorCatchObject(args); } // HK "Hot key framework", evo 30.07.2009 <-- sysSetupFormRun = SysSetupFormRun::construct(args); return sysSetupFormRun; } Спасибо: Спасибо за внимание. Надеюсь, большое количество букв не сильно утомило и HK Framework для кого-нибудь окажется полезным. | 
|  | |
| За это сообщение автора поблагодарили: AlGol (1), denny (1), Logger (15), Denicce (1), andrewK (1), konopello (3), Link (1), Kolja (1), madm (1), Stainless (1), alex55 (1), _scorp_ (4), SRF (3), JeS (1), Eaglet (1), Silphidae (1), pedrozzz (1), Dumfag (1). | |
|  03.08.2009, 07:38 | #2 | 
| Участник |  Небольшие штрихи Цитата: При импорте проекта в DAX 4.0 (Aplication Version 4.0.1633.11) возникли ошибки компиляции HKProject\buildAOTStruct, ошибка в строке X++: TreeNode methodNode, classNode; X++:     TreeNode        methodNode;
    TreeNode        classNode;Цитата: 
		
			Класс --> Класс родитель --> Класс родитель --> ... --> Базовый класс 
		
	  Предлагаю такой вариант устранения помарки(HKAOT\aotJump), вместо : X++: case UtilElementType::Class: sysDictClass = new SysDictClass(className2Id(treeNode.treeNodeName())); if (sysDictClass && sysDictClass.extend()) treeNodeTargetPath = strFmt(#ClassNamePath, classid2name(sysDictClass.extend())); break; X++: case UtilElementType::Class: sysDictClass = new SysDictClass(className2Id(treeNode.treeNodeName())); if (sysDictClass && sysDictClass.extend()) treeNodeTargetPath = strFmt(#ClassNamePath, classid2name(sysDictClass.extend())); else { return; } break;  ),подразумевался код X++: //Event fired by kernel when the client goes idle. //It is not fired during CTRL-Break dialog. void onEventGoingIdle() { this.operationProgressClear(); this.endLengthyOperation(true); // HK "Hot key framework", evo 30.07.2009 --> HKManager::startHKManager().run(false); // HK "Hot key framework", evo 30.07.2009 <-- } 
				__________________ Sergey Nefedov | 
|  | 
|  03.08.2009, 14:49 | #3 | 
| Боец | 
			
			2 SRF: Спасибо, всё верно. Шероховатости наверное ещё будут, не было времени обкатать. Ещё хочу добавить, что при установке в 5.0 (вообще для однозначности - при первой установке), нужно удалить метод \Classes\HKProject\aotStructList. При первом использовании плагина aot2project, он сгенерируется сам. | 
|  | 
|  27.01.2010, 12:39 | #4 | 
| Участник | 
			
			При использовании функции добавления текущего элемента AOT в текущий проект, при копировании из другого проекта, элемент копируется но группы создаются некорректно
		 | 
|  | 
|  16.02.2010, 12:28 | #5 | 
| Участник |   
			
			Разобрался в чем было дело, просто в различных приложениях узлы AOT в проекте называются по-разному, возможные варианты: 
 X++: ProjectGroupNode findOrCreateProjectGroup(TreeNode _treeNode)
{   #AOT
    ProjectGroupNode    ret, groupNode, bufGroupNode;
    TreeNodePath        path;
    TreeNodeName        groupName;
    container           pathCon;
    if (!projectNode || !_treeNode)
        return null;
    // + KAnt
    //path    = strReplace(_treeNode.treeNodePath(), ' ', '_');
    path    = _treeNode.treeNodePath();
    // - KAnt
    pathCon = str2con(path, #AOTRootPath);
    pathCon = condel(pathCon, 1, 1); // remove first delimiter
    groupNode = projectNode;
    while (conlen(pathCon) > 1)
    {
        groupName = conpeek(pathCon, 1);
        bufGroupNode = groupNode.AOTfindChild( groupName );
        // + KAnt
        if(!bufGroupNode)
        {
            bufGroupNode = groupNode.AOTfindChild( strReplace(groupName, ' ', '_') );
        }
        if(!bufGroupNode)
        {
            bufGroupNode = groupNode.AOTfindChild( strReplace(groupName, ' ', '') );
        }
        // - KAnt
        if (!bufGroupNode)
        {
            bufGroupNode = groupNode.AOTadd(groupName);
            bufGroupNode.projectGroupType(SysTreeNode::path2ProjectGroupNodeType(_treeNode.treeNodePath()));
            this.changeGroupPos(bufGroupNode);
        }
        groupNode = bufGroupNode;
        pathCon = condel( pathCon, 1, 1);
    }
    ret = groupNode;
    return ret;
} | 
|  | 
|  26.08.2010, 13:06 | #6 | 
| Участник | 
			
			На формах настроенные горячие клавиши не срабатывают.    | 
|  | 
|  26.08.2010, 13:17 | #7 | 
| Участник | 
			
			Попытался настроить вызов формы заказов по Ctrl+5. Открыл произвольную форму - нажимаю сочетание - никакой реакции
		 | 
|  | 
|  09.08.2011, 14:08 | #8 | 
| Участник | 
			
			проект ещё разрабатывается? окончательный варинт можно скачать где-нибудь? заметил, что блог http://earlionakru.blogspot.com/ с этим проектом тоже давно не обновлялся... | 
|  | 
|  10.08.2011, 00:16 | #9 | 
| Боец | 
			
			Больше не разрабатывается, ничего нового не придумал. На блоге последняя версия
		 | 
|  | 
|  15.08.2011, 13:35 | #10 | 
| Британский учённый | Цитата: Буду рад поделиться с общественностью, но не вижу смысла плодить версии да и авторское право не хочу нарушать. Если есть время и желание расширить функционал могу выложить здесь или лучше выслать на мыло. Вкратце что основного я добавил: 1) Новый класс для управления общими событиями: AOTImport - импорт из АОТ, для версии ниже 2009 mainMenu - вызов главного меню openDefaultProject - открыть проект по умолчанию leftSideFull, leftSideLeft, leftSideRight, rightSideFull, rightSideLeft, rightSideRight - управление окнами (Tabax) 2) Добавлены методы в для управления AOT: aot2compare - вызов утилиты сравнения aot2xRef - вызов перекрестных ссылок copyPath2clipboard - копировать полный путь (Tabax) newWindow - открыть новое окно 3) Добавлены методы для управления редактором goToDeclaration - известный скрипт, взят с форума openObject - расширил openNewWindow 4) Добавил на форму интеграцию с настройками девелоперского функционала. 
				__________________ Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. | 
|  | 
|  15.08.2011, 13:43 | #11 | 
| Британский учённый | 
			
			Еще добавил фикс класса Info\onEventGoingIdle - проверка активного окна, что бы не срабатывали горячие клавиши, когда Аксапта свернута или открыто несколько клиентов. X++: // HK "Hot key framework", mxk 30.07.2009 --> if (winApi::getForegroundWindow() == infolog.hWnd()) { DEV_HKManager::startHKManager().run(false); } // HK "Hot key framework", mxk 30.07.2009 <-- 
				__________________ Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. | 
|  | 
|  31.03.2013, 09:31 | #12 | 
| Участник | 
			
			На AX2012 никто еще не портировал эти разработки?
		 | 
|  | 
|  01.04.2013, 10:50 | #13 | 
| Боец | 
			
			Апгрейд в целом сделан, но я не выклыдывал - нет временени. Если у кого-то есть силы довести до "релиза", вышлю обновленный исходник. Из ниансов: - HK больше не работает в редакторе X++ (нужен анализ, возможно ли сейчас его прикрутить) - Добавлен TaskList, Где видна история всех сделанных модификаций - Form Digger и HK Framework теперь одно целое. | 
|  | |
| За это сообщение автора поблагодарили: Ace of Database (4), Stainless (1). | |
|  01.04.2013, 13:27 | #14 | 
| Участник | 
			
			В редакторе X++ можно теперь использовать расширения для VS. Может и хоткеи так добавятся?
		 | 
|  | |
| За это сообщение автора поблагодарили: mazzy (2). | |
|  01.04.2013, 17:10 | #15 | 
| Боец | Цитата: 
		
			Сообщение от belugin
			   В редакторе X++ можно теперь использовать расширения для VS. Может и хоткеи так добавятся? | 
|  | 
|  02.07.2015, 17:07 | #16 | 
| Боец | 
			
			Новая версия для 2012 R2, R3, от Декабря 2014г. Вложение 9316 Что нового: 
 По установке: 
 По работе: 
 Вложение 9313 Еще пару слов: Вероятнее всего это последняя версия, по причинам: 
 Последний раз редактировалось DSPIC; 28.09.2017 в 01:50. | 
|  | |
| За это сообщение автора поблагодарили: Logger (10), Ace of Database (10), Link (5), alex55 (5), S.Kuskov (5). | |
|  26.07.2016, 15:45 | #17 | 
| Боец | 
			
			По просьбе qwosy выкладываю исходник HKFramework2012R3.dll Вложение 10886 - если не затруднит, выложите сюда пересобранную версию и исходник для CU11 - если возможно, переименуйте финальную dll в Microsoft.Dynamics.AX.Editor.HKFramework.dll, ибо режет глаз - проект под VS2010, можно переделать в VS2015 Последний раз редактировалось DSPIC; 28.09.2017 в 01:50. | 
|  | |
| За это сообщение автора поблагодарили: mazzy (2). | |
|  27.07.2016, 08:43 | #18 | 
| Участник | 
			
			Собранная в VS2010 рабочая Microsoft.Dynamics.AX.Editor.HKFramework.dll с библиотеками от AX 2012 R3 CU11: 
 | 
|  | |
| За это сообщение автора поблагодарили: DSPIC (14). | |
|  27.07.2016, 08:50 | #19 | 
| Участник | 
			
			а может положите на github?
		 | 
|  | 
|  27.07.2016, 10:30 | #20 | 
| Боец | |
|  | 
| Теги | 
| ax2009, ax4.0, formdigger, hk, hkframework, hotkey, горячие клавиши, полезное, утилиты | 
|  | 
| 
 |