![]() |
|
![]() ![]() ![]() |
|
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Всем привет!
Никак не могу сделать окно активным. Пробовал ShowWindow, BringWindowToTop, SetActiveWindow, SetWindowPos, Send(Post)Message. Всё одно - окно разворачивается но не становится активным, а остаётся под текущим окном. Уже не знаю что делать. Все танцы с бубном происходят под Vista'ой. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
Есть ещё SetForegroundWindow.
![]() |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
586, спс. Испробую.
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Помогло! Спасибо 586.
Осталась единственная проблема, о которой я не упомянул сразу. Если окно было в свёрнутом состоянии, то после того как оно развернётся, перестаёт работать кнопка свернуть. Она подсвечивается и нажимается, но толку от этого никакого (тоже самое с пунктом системного меню). Причем само приложение работает отлично и остальные системные кнопки тоже. Если нажать на кнопку приложения на панели задач, происходит анимация развёртывания окна (?!) и кнопка свернуть начинает работать нормально. Что это за ерунда и как это можно вылечить? ЗЫ окно разворачиваю так:
Со всеми остальными флагами та же песня. Это сообщение отредактировал(а) artsb - 20.12.2009, 14:04 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
586 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
А если так:
Можно ещё окно приложения восстановить классическим для VCL способом, но не знаю, как это будет работать в висте:
|
||||
|
|||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
586, так окно "не моё". Я его ищу через FindWindow.
Я, вообще, делаю так, чтобы при запуске второго экземпляра моей программы, открывалось окно первой, а не запускалась вторая копия. Так что, ту можно воспользоваться и сообщениями. Но если можно обойти предыдущий косяк, то нет смысла извращаться. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 25 Всего: 372 |
artsb, хмм... как то странно... Я бы сделал так:
Окошком приложения обрабатываем некое наше сообщение. В нем один из параметров я бы задействовал под передачу строки. (LPARAM пусть будет). Ну и в этом же сообщении разворачиваем свое окно. Когда запускается новая копия то, если находим старую - отправляем окошку сообщение(в LPARAM засунуть командную строку. если у тебя конечно в ней что то ценное бывает) и завершаемся. Как то так наверное. |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
THandle, я этот вариант тоже рассматривал. Если ничего исправить не получится, буду реализовывать его.
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Использование сообщений не помогло...
Обработчик сообщения:
Вместо строки "// разворачиваю окно" пробовал много чего, но помогло только:
И опять теже проблемы с кнопкой свернуть ![]() -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 25 Всего: 372 |
artsb, выложи тестовый пример поного твоего случая
![]() |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Вот тестовый проект. Абсолютно голый. Та же беда.
ЗЫ если проект открыт в билдере и окно запущенного приложения свёрнуто, то FindWindow находит окно из проекта ![]() ЗЗЫ Под Win7 та же беда. Мне кажется, версия билдера роли тут не играет это же WinAPI... Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
shklowsky |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 21.7.2009 Репутация: 5 Всего: 6 |
||||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
shklowsky, спасибо. Помогло.
Кстати, я тоже баловался с кнопкой приложения. Но нужно было юзать флаг SW_SHOWNORMAL, а я использовал SW_SHOW.
В висте отлично работает, а вот в вин7 не хочет выдвигать окно вперёд, просто кнопка приложения мигает и всё. Но это мелочи. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Полазил на сайте MSDN и некоторых зарубежных сайтах и решил проблему!
Вся беда в том, что функция SetForegroundWindow и ей подобные корректно отрабатывают только из активного процесса. А у меня была ситуация, что я отправляю сообщение из активного приложения в неактивное и уже из него пытаюсь "выдвинуть" окно. И если в Висте это прокатывало, то Win7 здесь будет по строже ![]() В общем, вот:
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |