|  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 | 
| Участник | Цитата: Но если нужно использовать полное меню - то очень неудобно. | 
|  |