|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.07.2013, 19:48 | #1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Получить гл. окно от дочернего.
Доброго времени суток!
Моя программа "встраивает" моё окно, в окно другой программы. Банально перерисовывает его в нужных координатах и делает StayOnTop если окно активно. Проблема: Если я выбираю чужое окно(не элемент чужого окна), то все нормально. Моё окно переходит в FormStyle:=fsNormal. А если я выбираю элемент в чужом окне, то этого не происходит. В итоге глюк: Программа куда я рисую своё окно - прячется, мой аддон - не прячется(fsStayOnTop) и перекрывает окно в котором юзер работает(выбрав в нем элемент( не само окно), и передав фокус). Пробовал использовать и GetParent, и GetWindow с флагом GL_OWNER - не работает. Код:
Последний раз редактировалось Человек_Борща; 15.07.2013 в 19:50. |
15.07.2013, 20:43 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Навскидку: Таймер (или доппоток), проверяющий активность твоего окна. Если неактивно (т.е. фокус не принадлежит ни одному из твоих контролов - прятаться.
I'm learning to live...
|
15.07.2013, 21:44 | #3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Stilet, не в этом суть.
Моё окно должно рисоваться когда активно окно(или дочерние окна), с которым связано мое, и моё окно становиться в FormStyle:=fsStayOnTop. В любом другом случае: fsNormal. Даже в случае с дочерними окнами, окна, к которому моё привязано я не могу отследить привязку, т.е. с таким кодом: Код:
А при таком раскладе все ок: Код:
Последний раз редактировалось Человек_Борща; 15.07.2013 в 21:59. |
15.07.2013, 23:23 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ух... Если не секрет в чем смысл задачи?
А то я как-то не соображу четко что нужно то...
I'm learning to live...
|
16.07.2013, 01:10 | #5 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
Если юзер работает в окне чата и всех производных окнах этого же чата, то моё окно так же рисуется. Как только окно чата исчезает, моё так же на это реагирует. Другое дело, когда окно чата не в фокусе и не скрыто. Для этого использую GetForegroundWindow, и делаю сравнение, если текущее окно отличается от окна чата, то моё окно перестает перекрывать все окна. Вот с эти и проблема. Если переключаться на чужое окно(именно само окно а не какие-то кнопки и т.п. внутри), то: Цитата:
А если переключится в чужое окно, кликнув на кнопки и т.п. но не на само окно, то моя форма остаётся в fsStayOnTop, но окно того же чата уходит на задний план. И моё окошко мешает пользователю. Этот же баг характерен и для окон самого чата. Чем это лечить? |
||
16.07.2013, 07:58 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ага, терь еще ону айдею толкну: GetForegroundWindow() даст активное окно. Если это не главное окно чата, то в цикле можно посредством GetParent() получать родителей по иерархии, найдя главное окно чата, и определив его видимость и принадлежность активного окна этому чату.
Код:
I'm learning to live...
|
16.07.2013, 15:05 | #7 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Неа, не сработало, ПО виснет намертво.
Таймер стоит на 200 мс, чтобы четко реагировать на действия юзера ну и перекрывать скин чата. Демонстрация глюка: http://youtu.be/Zk1qIyJs8Sg Когда я, из окна чата, переключаюсь на чужое окно - то все нормально. Когда я, из окна чата, переключаюсь в чужое окно(что-то внутри) - то происходит глюк. |
16.07.2013, 16:09 | #8 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
А GetForegroundWindow что возвращает в такие моменты?
Благодарить в репутацию. Проклинать — туда же
|
16.07.2013, 17:00 | #9 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Код:
I'm learning to live...
|
16.07.2013, 17:24 | #10 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
Цитата:
Что странно, такой код: Код:
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Получить имя дочернего класса в базовом | Cronos20 | PHP | 3 | 28.03.2011 19:44 |
[?] Послать клавишу в чужое окно, не выводя окно на передний план. | Moriarty | Win Api | 4 | 21.02.2011 05:11 |
Получить имя активного дочернего окна в MDI | JeyKip | Общие вопросы C/C++ | 4 | 05.12.2010 02:59 |
Получить дескриптор дочернего окна | Crudelis | Win Api | 1 | 15.10.2010 21:45 |
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. | RustreX | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 11.11.2007 19:28 |