20.09.2011, 12:38 | #1 |
Британский учённый
|
Старое главное меню по хоткею
Для любителей удобств - олдстайл меню по комбинации 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); } } 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 |
Участник
|
Тоже у себя приделал старое меню.
По-моему оно гораздо эргономичнее. Достаточно просто посчитать число кликов и движений мышью. Непонятно зачем от него отказались. Единственное разумное объяснение, которое приходит в голову - это меню не предназначалось для ежедневной работы. Видимо для ежедневной работы планировалось использовать Избранное. Но это годится не для всех |
|
20.09.2011, 15:52 | #3 |
Британский учённый
|
Цитата:
Сообщение от Logger
Тоже у себя приделал старое меню.
По-моему оно гораздо эргономичнее. Достаточно просто посчитать число кликов и движений мышью. Непонятно зачем от него отказались. Единственное разумное объяснение, которое приходит в голову - это меню не предназначалось для ежедневной работы. Видимо для ежедневной работы планировалось использовать Избранное. Но это годится не для всех
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
20.09.2011, 16:34 | #4 |
Молодой, подающий надежды
|
Ax 2009 RU6
Не компилируется метод showHideMM() .Ругается на отсутствие WinAPI::isWindowVisible(). Можете дать код? |
|
20.09.2011, 16:37 | #5 |
Британский учённый
|
Цитата:
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 |
Участник
|
Цитата:
Но если нужно использовать полное меню - то очень неудобно. |
|