![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 22.10.2008
Сообщений: 129
|
![]()
У меня две формы Form1 и Form2
у обоих FormsStyle=fsStayOnTop если установить фокус на Form1 (active=true) то обе формы выводятся поверх всех но если установить фокус на Form2 то поверх всех остаётся только Form1 как это исправить? мне необходимо чтобы обе формы всегда были поверх всех
Никто не знает больше чем не знаю я
|
![]() |
![]() |
![]() |
#2 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]()
Попробуй закинуть это в он крейт каждой формы:
with form1 do SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); Для форм 2 соответственно form2
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 22.10.2008
Сообщений: 129
|
![]()
не спасает эффект тот же
получается эффект родительской и дочерней формы пока родительская Form1 active то оба окна StayOnTop если Form1 не активна то родительское Form2 уже не StayOnTop PS (выражение родительская и дочерняя формы приведено условно) данная проблема решена в плеере AIMP там есть окно плеера и окно плейлиста и оба StayOnTop перекрывают все окна я так понял нужно в Z-последовательности установить в самый верх Form1 и Form2 (последовательно) и ниже по списку все остальные формы но как это сделать?
Никто не знает больше чем не знаю я
Последний раз редактировалось Stilet; 18.09.2009 в 08:30. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 28.09.2008
Сообщений: 344
|
![]()
В Application.OnDeactivate переносите фокус на главную форму.
В Application.OnActivate восстанавливайте нужный фокус. ( У меня сработало ) |
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 28.03.2007
Сообщений: 1,814
|
![]()
Очень даже всё работает:
Код:
|
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 28.09.2008
Сообщений: 344
|
![]() Цитата:
Выделил Form2 перешел к другой программе - обе формы сверху перешел к третьей программе - Form2 скрылась за ней перешел к тестовой программе (кнопкой в низу) обе формы всплыли, выделенной стала Form1 не трогая формы переключисля на другую программу - Form2 скрылась. Если же перед всеми действиями выделена Form1 - то все попрежнему нормально. Кстати посмотрел в Forms.pas в методе Код:
Последний раз редактировалось s.Creator; 18.09.2009 в 13:28. |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 22.10.2008
Сообщений: 129
|
![]()
Вобщем что выяснилось если я кликаю на окно не моего проекта и при этом было активно первое окно моего проекта (Form1) то все окна моего проекта остаются StayOnTop (если у форм это св-во установлено)
если же было активно любое другое окно моего проекта (не Form1) и я кликнул на окно не моего проекта то остаётся StayOnTop только окно Form1 все остальные окна моего проекта уже не StayOnTop выход нашёл пока только один он кривой но работает в таймере if not form2.active then setforegroundwindow(form1.Handle) если я кликаю по чужому окну и при этом активна Form2 то устанавливаем фокус на form1 пробовал установить этот же код на событие Form2.FormDeactivate но оно не срабатывает если я кликаю по чужому окну как выполнить этот код при потере фокуса Form2? сделал так: Код:
появляется это решил проблему Код:
думаю в aimpe так и сделано увидеть потерю фокуса форм не возможно так как все компоненты не имеют визуального фокуса и пользователь этого не замечает ой старый код вставил вот новый Код:
![]()
Никто не знает больше чем не знаю я
Последний раз редактировалось Stilet; 21.09.2009 в 09:45. |
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 28.09.2008
Сообщений: 344
|
![]() Цитата:
Вторая фраза ( В Application.OnActivate восстанавливайте нужный фокус ) Мне пока неудалась. Пробовал: Код:
|
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 22.10.2008
Сообщений: 129
|
![]()
s.Creator ваш способ работает но возвращать активность приложения нужно не по клику на однно из окон проекта (в этом случае игнорируется восстановление ранее активного окна) восстанавливать нужно по Alt-Tab
Вот пример:
Никто не знает больше чем не знаю я
|
![]() |
![]() |
![]() |
#10 | |
Форумчанин
Регистрация: 28.09.2008
Сообщений: 344
|
![]() Цитата:
Код:
то Delphi выполняет этот код в Forms.pas. И в обоих примерах восстановление фокуса работает при использовании Alt-Tab, а вот если кнопочками на панеле задач, то не всегда. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
StayOnTop | RIO | Общие вопросы Delphi | 6 | 17.01.2008 15:19 |