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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.09.2011, 12:38   #1  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Старое главное меню по хоткею
Для любителей удобств - олдстайл меню по комбинации Ctrl+\
Открывает новое, или восстанавливает свернутое или прячет главное меню.

Можно еще доделать например по Ctrl+Shift+\ управлять всеми главными меню, а не только текущей компании.

Info\onEventGoingIdle
X++:
    if (winApi::getForegroundWindow() == infolog.hWnd())
    {
        // MainMenu >
        if (WinAPI::getAsyncKeyState(#control, (0xE2), 0)) // Ctrl + \
        {
            DEV_RunMainMenu::showHideMM();
        }
        // MainMenu <
    }

X++:
static client void showHideMM()
{
    #WinAPI
    #AOT

    #define.USER32('USER32')
    #define.GetTopWindow('GetTopWindow')
    #define.MDIClient('MDIClient')

    HWND                            mainMenu;
    DLL                             user32;
    DLLFunction                     getTopWindow;
    str                             st1, st2;
;
    user32          = new DLL(#USER32);
    getTopWindow    = new DLLFunction(user32, #GetTopWindow);
    getTopWindow.returns(ExtTypes::DWord);
    getTopWindow.arg(ExtTypes::DWord);

    mainMenu =  getTopWindow.call(WinAPI::findWindowEx(infolog.hWnd(), 0, #MDIClient, ''));

    st1 = WinAPI::getWindowText(mainMenu);
    st2 = strReplace(strfmt('Main menu  -  %1 (%2)',
                    (select firstonly DataArea where DataArea.Id == curext()).name, curext()), '-', '.');

    if (    mainMenu
        &&  match(st2, st1))
    {
        WinAPI::minimizeWindow(mainMenu);
        sleep(100);
    }
    else if (appl.globalCache().isSet(classstr(DEV_RunMainMenu), curext()))
    {
        mainMenu = any2int(appl.globalCache().get(classstr(DEV_RunMainMenu), curext(), null));

        if (    mainMenu
            &&  WinAPI::isWindowVisible(mainMenu))
        {
            WinAPI::sendMessageEx(mainMenu, #WM_SYSCOMMAND, #SC_RESTORE, 0);
        }
        else
        {
            appl.globalCache().remove(classstr(DEV_RunMainMenu), curext());
            TreeNode::findNode(#MenusPath + #AOTRootPath + menustr(MainMenu)).AOTrun();
            sleep(100);
            mainMenu = getTopWindow.call(WinAPI::findWindowEx(infolog.hWnd(), 0, #MDIClient, ''));
            appl.globalCache().set(classstr(DEV_RunMainMenu), curext(), mainMenu);
        }
    }
    else
    {
        TreeNode::findNode(#MenusPath + #AOTRootPath + menustr(MainMenu)).AOTrun();
        sleep(100);
        mainMenu = getTopWindow.call(WinAPI::findWindowEx(infolog.hWnd(), 0, #MDIClient, ''));
        appl.globalCache().set(classstr(DEV_RunMainMenu), curext(), mainMenu);
    }
}
WinAPI
X++:
//>> : MXK 04/09/08-13:05:07 >
client static boolean getAsyncKeyState(int _key1 = 0, int _key2 = 0, int _key3 = 0)
{
    DLL             _winApiDLL      = new DLL(#UserDLL);
    DLLFunction     _getKeyState    = new DLLFunction(_winApiDLL, identifierstr(GetAsyncKeyState));
    boolean         ret1, ret2, ret3;
;
    _getKeyState.returns(ExtTypes::Word);
    _getKeyState.arg(ExtTypes::DWord);

    ret1 = _key1 ? _getKeyState.call(_key1) & 0x8000 : false;
    ret2 = _key2 ? _getKeyState.call(_key2) & 0x8000 : false;
    ret3 = _key3 ? _getKeyState.call(_key3) & 0x8000 : false;

    return      (_key1 ? ret1 : true)
            &&  (_key2 ? ret2 : true)
            &&  (_key3 ? ret3 : true);
}
//<< : MXK 04/09/08-13:05:07 >
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.

Последний раз редактировалось Link; 20.09.2011 в 12:43.
За это сообщение автора поблагодарили: mazzy (5), Logger (10), pedrozzz (1).
Старый 20.09.2011, 15:26   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Тоже у себя приделал старое меню.

По-моему оно гораздо эргономичнее.
Достаточно просто посчитать число кликов и движений мышью.

Непонятно зачем от него отказались.

Единственное разумное объяснение, которое приходит в голову - это меню не предназначалось для ежедневной работы. Видимо для ежедневной работы планировалось использовать Избранное.

Но это годится не для всех
Старый 20.09.2011, 15:52   #3  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от Logger Посмотреть сообщение
Тоже у себя приделал старое меню.

По-моему оно гораздо эргономичнее.
Достаточно просто посчитать число кликов и движений мышью.

Непонятно зачем от него отказались.

Единственное разумное объяснение, которое приходит в голову - это меню не предназначалось для ежедневной работы. Видимо для ежедневной работы планировалось использовать Избранное.

Но это годится не для всех
Гораздо эргономичнее, особенно если речь идет о полном меню. К тому же экономия места под разработку. К сожалению в 2009 версии интерфейс расчитывался только для пользователей, а о разработчиках подумали только в 2012.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 20.09.2011, 16:34   #4  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Ax 2009 RU6
Не компилируется метод showHideMM() .Ругается на отсутствие WinAPI::isWindowVisible(). Можете дать код?
Старый 20.09.2011, 16:37   #5  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от pedrozzz Посмотреть сообщение
Ax 2009 RU6
Не компилируется метод showHideMM() .Ругается на отсутствие WinAPI::isWindowVisible(). Можете дать код?
X++:
// >> KAB:MXK 18/02/11-12:53:29 DEV>>
static client boolean isWindowVisible(HWND _HWND)
{
    DLL                                 user32 = new DLL(#UserDLL);
    DLLFunction                         isWindowVisibleFun;
;
    isWindowVisibleFun = new DLLFunction(user32, 'IsWindowVisible');
    isWindowVisibleFun.returns(ExtTypes::DWord);
    isWindowVisibleFun.arg(ExtTypes::DWord);

    return isWindowVisibleFun.call(_HWND) ? true : false;
// << KAB:MXK 18/02/11-12:53:29 DEV<<
}
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 20.09.2011, 18:59   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Link Посмотреть сообщение
К сожалению в 2009 версии интерфейс расчитывался только для пользователей, а о разработчиках подумали только в 2012.
Мне кажется пользователям это тоже неудобно. Наверно рассчитывали, что среднестатистический юзер при работе использует немного пунктов меню и проще их все в избранное положить.

Но если нужно использовать полное меню - то очень неудобно.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Evgeny Arlionak: Ссылки на главное меню: как получить? Blog bot DAX Blogs 2 02.02.2009 18:14
Главное меню для группы пользователей sgt.Pepper DAX: Программирование 3 05.11.2007 23:26
Можно ли раскарасить главное меню? Hobo DAX: Программирование 3 19.12.2003 15:39
Как отключить "Переход в главное меню" DDA DAX: Функционал 5 24.04.2003 13:45
Работа с главным меню в Axapta Alexey DAX: Программирование 0 04.01.2002 23:31
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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