![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потерять фокус [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