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).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 06:17.