Поместить форму поверх всех окон

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

Вобщем необходимо, чтобы окно моей программы висело все время поверх всех других окон (если его естественно не свернут в панель задач).
Разъясняю конкретней - чтобы не просто было поверх окон в Windows, но и например если запущено какое то полноэкранное приложение (напр. игрушка какая-нибудь), то все равно должна быть поверх, чтобы я видел ее (свою форму)
свойство StayOnTop не помогает, при запуске полноэкранных приложений моя форма пропадает.
Пробовал поставить таймер и каждую милисекунду делать Show со свойством StayOnTop - в итоге форма просто "померцала" но в итоге все равно пропала.
Может кто знает каким образом все таки заставить ее все время быть поверх всех других???
заранее спасибо.
Лелик_1044
Сообщения: 340
Зарегистрирован: 22 ноя 2004, 19:15
Откуда: Минск
Контактная информация:

Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

1 и 3 вариант - и там и там мерцание формы (или вообще пропадает через некоторое время) - что меня не устраивает.
2 вариант - ссылка уже не работает (((
а вообще я почему думаю что это возможно (но не могу найти как). когда только начиналась популярность разных компьютерных клубов (ну там по локалке поиграть в контер страйк и все такое прочее), эти клубы ставили себе программу типа админа, которая учитывала на сколько время оплатил клиент компьютер и когда это время кончалось то вырубала к тому компу доступ. так вот, за 5 или 10 минут до окончания этого времени эта программа показывала юзеру, что у него кончается время - то есть поверх игры показывалось окошко с соответствующей надписью и оно НЕ мерцало, а четко держалось в течении (вроде бы) 10 секунд (что ужасно злило меня когда я играл в контер страйк и оно перекрывало мне весь обзор).
исходя из этого я предполагаю, что все таки есть способ поместить свою форму поверх всех. жду Ваших предложений по этому поводу.
Заранее спасибо.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Всегда был уверен, что для того, чтобы диалог был всегда сверху, ему достаточно задать стиль WS_EX_TOPMOST. Делфийский аналог должен подсказать Naeel.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
senator
Сообщения: 23
Зарегистрирован: 08 ноя 2004, 19:35
Откуда: Almaty
Контактная информация:

Попробуй поиграть с командйо ShowModal. То есть тебе нужно выбрать процедуру, при выполнении которой будет выполняться команда ShowModal, т.е. твоя форма будет модальной, пока ты ее не закроешь, ты не сможешь работать с другими приложениями
Я знаю, что ничего не знаю. Но остальные не знают даже этого
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Делфийский аналог должен подсказать Naeel.
А Делфийского варианта-то и нет.
Флаг WS_EX_TOPMOST в расширренном стиле окна надо утанавливать либо с помощью функций Get/SetWindowLong либо (что удобнее) - SetWindowPos

AndreykA, если Вы ренее не использовали эту функцию, то пусть Вас не смущает обилие параметров. Например, несмотря на параметры X, Y, Cx, Cy совершенно не обязательно что Вы должны указывать положение и размер окна. Передавайте здесь нули, но используйте значение (SWP_NOSIZE or SWP_NOMOVE) в uFlags.

Так как это прямое WinAPI-обращение к окну, то эта функция может сделать окно видимым, а свойство Visible останется False, если эта особенность актуальна, то в uFlags добавьте еще ...or SWP_NOSHOWWINDOW.
Т.е. Вам важен только параметр hWndInsertAfter
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

2 Naeel Maqsudov
Наконец то появилось время и я попробовал реализовать через апи функции
SetWindowPos, так же пробовал SetForegroundWindow
в обоих случаях форма показывается поверх полноэкранных приложений, но она все равно мерцает, и (я использовал в качестве полноэкранного - игру) когда игра доходит до перерисовки той части экрана, где моя форма висит, то она зарисовывает мою форму.
(простите за тофтологию).
Может еще есть какие варианты?
Заранее спасибо.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Боюсь, что игру, работающую в полноэкранном режиме победить не удастся. Игрушки, использующий полноэкранный режим, в этом отношении всегда будут оказываться сильнее и будут именно "зарисовывать" Вашу форму, которая в этом случае обязана будет себя обновлять, чтобы всплыть-таки на поверхность.

На сколько я понимаю этот процесс, в полноэкранном режиме windows не разбирается какую часть окна можно трогать а какую нет. По идее весь экран отдается на откуп полноэкранному приложению, и оно что хочет там, то и делает. А другие приложения оказываются в пролете.
Ответить