Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Потерять фокус [D7, WinXP]


Kns ©   (2007-09-03 15:28:00) 

Добрый день, помогите со сменой фокуса.
Нужно отправить приложение на задний план и сделать активным самое верхнее из окон на экране.
Делаю так

Application.MainForm.SendToBack;
h:=GetTopWindow(0);
Windows.SetFocus(h);

Приложение уходит но фокус не отдает. Почему?


Lacmus   (2007-09-03 16:39:00) [1]

>Kns   (03.09.07 15:28)  

Application.Minimize ?


Сергей М.   (2007-09-03 16:14:00) [2]

Возьми на вооружение SpyXX и посмотри что это за окно h


Kns   (2007-09-03 16:03:00) [3]

Ну насчет SetFocus ошибся не обратил внимания, что в MSDN сказано
The window must be attached to the calling thread's message queue.
А в остальном вопрос тотже.


h:=GetTopWindow(0);
if h<>0 then
 begin
 Application.MainForm.SendToBack;
 SetForegroundWindow(h);
 end;

Не активирует приложение лежащее сверх.


Сергей М.   (2007-09-03 15:49:00) [4]


> опытным путемя выяснил что вместо
> Windows.SetFocus


И зачем эспериментировать, если логика работы обеих ф-ций описана в справке ?


> предпологаю что GetTopWindow(0) возвращает хендл невидмого
> окна


Это вряд ли)


Kns   (2007-09-03 15:42:00) [5]

Нет. H<>0.
вообще опытным путемя выяснил что вместо
Windows.SetFocus(h);
нужно использовать
SetForegroundWindow(h);
Тогда фокус уходит но кому отдается не видно.
Я предпологаю что GetTopWindow(0) возвращает хендл невидмого окна.


Сергей М.   (2007-09-03 15:36:00) [6]


> Почему?
>


Вероятно потому что h = 0


Наверх

Титульная страница Поиск, карта сайта Написать письмо