27.10.2004, 18:03 | #1 |
Участник
|
Как вызвать окно Select Window?
Приветствую ALL!
В верхнем меню если открыто больше 9 окон появляется пункт "More Windows...", который вызывает окно Select Window. Как можно вызвать это окно из кода? С уважением, wb |
|
28.10.2004, 14:17 | #2 |
экс-модератор
|
помню, интересовался я эти окном, но ничего не нашел
т.е. пришел к мнению, что если его и можно к-л открыть, то только обратившись к MDI интефейсу через winapi, а я к сожалению, не большой специалист в этой области. (хотел сделать панель задач, навроде как в браузере опера. вы, случайно, не что-либо подобное задумали?) |
|
29.10.2004, 10:23 | #3 |
Участник
|
Цитата:
Изначально опубликовано maxsmirnov
помню, интересовался я эти окном, но ничего не нашел т.е. пришел к мнению, что если его и можно к-л открыть, то только обратившись к MDI интефейсу через winapi, а я к сожалению, не большой специалист в этой области. (хотел сделать панель задач, навроде как в браузере опера. вы, случайно, не что-либо подобное задумали?) |
|
03.11.2004, 16:54 | #4 |
экс-модератор
|
случайно наткнулся на что-то похожее
в xInfo есть метод activateWindow() судя по контексту (поищите в АОТе "activateWindow") он берет на вход hWnd если получить к-л образом список hWnd всех окон (наверняка же можно, через winapi..???), то можно организовать панель с которой можно будет активировать окна. вот так можно получить хВнд родительского окна клиента аксапты WinAPI::findWindow('AxaptaClientClassName', ''); есть метод static client public HWND findWindowEx(HWND _parent, HWND _after, str _class, str _title) с помощью которого можно получать дочерние окна как его юзать - я не понял... вернее, понял, но не смог применить :) поискав в инете доку на винапишную функцию FindWindowExA которую он юзает, я написал следующий код: PHP код:
хуже того hwnd - это, как правило, довольно большие, 6-значные инты. я попробовал перебором найти то, что примет на вход activateWindow(), и обнаружил, что перебирая числа от 0 до 1000 я преребрал все октрытые у меня на тот момент окна!!! PHP код:
с одной стороны (судя по классу sysCompilerOutput, к примеру) activateWindow берет на вход хвнд, и это работает, с другой стороны опытным путем было найдено окно которой активировалось по activateWindow(906)... если будут к-л результаты - пишите PS. я изменил тему треда в надежде что такая привлечет больше людей :) Уважаемые разработчики! Предлагаю совместно исследовать возможность соорудить в аксапте панель задач! |
|
03.11.2004, 17:28 | #5 |
Участник
|
|
|
03.11.2004, 18:00 | #6 |
Участник
|
я создал тестовую форму с одной кнопкой
в init методе PHP код:
запуcкая PHP код:
значит не понятно, что выдает Ваш job на основе Цитата:
Изначально опубликовано maxsmirnov
вот так можно получить хВнд родительского окна клиента аксапты WinAPI::findWindow('AxaptaClientClassName', ''); |
|
03.11.2004, 19:06 | #7 |
экс-модератор
|
о!
я поставил сканнер окон с http://kickme.to/inqsoft и прозрел hwnd окон аксапты (окна с пользовательской точки зрения) просто лежат на уровень ниже. остальное - дело техники к сожалению, прямо сейчас у меня нет времени этим заняться, но когда напишу - от общественности скрывать не буду. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
03.11.2004, 21:18 | #8 |
Administrator
|
Вот, попробовал суммировать все предыдущие знания, не используя WinAPI. Получился такой вот проектик.
Выглядит следующим образом: Основной минус: Отслеживаются только формы. То есть те окна, которые сделаны с использованием FormRun. То есть ни Главное меню, ни проекты отобразить не удалось. Когда-нибудь попробую сделать через WinAPI.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
03.11.2004, 21:39 | #9 |
Administrator
|
Цитата:
WinAPI::findWindow('AxaptaClientClassName', '');
различие между findWindow() и findWindowEx() состоит в том, что первая функция ищет только главные окна, а вторая - только подчиненные главному (для MDI-интерфейса). Таким образом рождается след код: PHP код:
|
|
|
За это сообщение автора поблагодарили: IvanS (1). |
03.11.2004, 22:46 | #10 |
экс-модератор
|
вот, наваял что-то через winapi...
возникают такие проблемы: 1. как отслеживать открытие/закрытие новых окон? не придумал ничего лучше чем зарядить сканирование в infolog.setTimeOut() с переодичностью раз в секунду... (не реализовал еще ) 2. свернутым окнам фокус передается, но они не разворачиваются в винапи есть метод maximize... он разворачивает на весь экран... ничего похожего на restore не нашел 3. как ни старался, не получилось сделать красиво, как в винде 4. отображаются скрытые окна. попутно выяснилось что окна infologа, хелпа, итп, никогда не закрываются, а только хайдятся про FormRun: идеальное решение мне видится как гибрид этих двух подходов. имея FormRun, можно корректно закрывать формы. |
|
04.11.2004, 08:56 | #11 |
Дмитрий Ерин
|
1. ИМХО, лучше ничего уже и не придумаешь...
2. Есть там RESTORE, просто его не обернули . В свой метод selectControl() подключи макрос #WinAPI и добавь строчку: WinAPI::sendMessageEx(hWnd, #WM_SYSCOMMAND, #SC_RESTORE, 0); 3. Не рановато красоту наводить? 4. Тут надо покопаться, но навскидку "скрытность" окон, вроде, можно отследить через АПИ-шную ф-цию GetWindowLong(HWND hWnd, int nIndex) P.S. Кстати, о красоте - кнопки схожего назначения (окна проектов, окна редакторов кода, формы, меню) было бы не плохо объединять в менюшки (а-ля XP). |
|
04.11.2004, 09:38 | #12 |
Участник
|
не стоит ли сделать это win32 приложением, т.к. все равно упремся в ограничения Axapta?
предлагаю накидать кратко пожелания и мысли по реализации сюда: http://erpkb.com/Axapta/Panel'Zadach чтобы иметь компактное представление итогов обсуждения |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
04.11.2004, 14:02 | #13 |
Участник
|
Цитата:
Изначально опубликовано maxsmirnov
вот, наваял что-то через winapi... возникают такие проблемы: 2. свернутым окнам фокус передается, но они не разворачиваются в винапи есть метод maximize... он разворачивает на весь экран... ничего похожего на restore не нашел |
|
18.04.2006, 15:41 | #14 |
Участник
|
Восстановление окна.
WinAPI::showWindow(hWnd,9); Другой вопрос. Почему кнопка после нажатия не работает, пока не нажать другую, а потом обратно эту? Последний раз редактировалось shura_k; 18.04.2006 в 15:48. |
|
18.04.2006, 17:13 | #15 |
Участник
|
А я пользуюсь вот этой Тулзой. Мне нравится.
|
|
Теги |
winapi, панель задач, инструменты, интерфейс |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|