Узнать, видна ли форма на экране?
Форма всегда visible=1, но несмотря на то, что она fsStayOnTop, временами пропадает куда-то на задний план. Alt+Tab восстанавливает её видимость.
Так вот - как программно узнать - не перекрывает ли форму моей программы что-либо ещё?
Application->RestoreTopMosts(); эффекта не даёт пока форма не в фокусе....
GetForegroundWindow() вам возможно частично может помочь. Она возвращает самое "верхнее". Правда ваше окно может быть и не на самом верхнем уровне но тем не менее ни кем не перекрываться - в такой ситуации GetForegroundWindow() не совсем то.
Попробуйте GetTopWindow(NULL)
допустим, удалось узнать, что моё окно чем-то прикрыто.
но как переместить окно на _визуальный_ передний блан так, чтобы на него не сфокусировалась система?
BringToFront() помогает только с визуальной точки зрения, но она же и отбирает фокус у других программ, а имено этого и нужно избежать.
А RestoreTopMosts(), как оказалось помогает не всегда.
Кстати, такое "пропадание" окон fsStayOnTop в большинстве случаев характерно именно для программ, которые были запущены автоматически при старте системы. При ручном запуске вероятность "пропадания" сокращается вдвое или даже втрое...
Код:
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE)
Цитата: 0nni
SetWindowPos(...)
Да! Отличная функция - проверил - работает! Причём именно так, как я и хотел. Огромное спасибо!
Сегодня же начну масштабный тест с этой функцией - надесь осложнений типа BringToFront() не будет (особенно в полноэкранных приложениях)...
Если через месяц не отпишусь в этой теме - значит всё работает идеально!