Две апишки - BringWindowToTop и SetWindowPos - якобы предназначены для выставления окна поверх всех окон, точнее так оно и есть, но они выставляют поверх всех окон! Есть апишка для выставления окна всегда поверх всех окон?
Есть апишка для выставления окна всегда поверх всех окон?
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Серега, спасиб, конешно, но этот код делает окно поверх всех окон, а нужно, чтоб было всегда поверх всех окон. Разница в том, что поверх всех окон - окно просто выйдет на передний план и любое другое окно сможет его покрыть. А всегда поверх всех окон - даже если кликнуть на другом окне, то такое окно просто станет неактивным, но останется на переднем плане.
ЗЫ: просто, в недавном посте про панели инструментов мне сказали, что делать надо вручную, вот я и сделала, последнее токо осталось - чтобы панели можно было окнами выносить, а эти окна, естественно, должны быть на переднем плане.
JaG, если через таймер, то окно будет очень наглым и все время будет гопничать и отметать у других окон фокус, получится полная фегня...
Серега, спасиб, конешно, но этот код делает окно поверх всех окон, а нужно, чтоб было всегда поверх всех окон. Разница в том, что поверх всех окон - окно просто выйдет на передний план и любое другое окно сможет его покрыть. А всегда поверх всех окон - даже если кликнуть на другом окне, то такое окно просто станет неактивным, но останется на переднем плане.
Этот код как раз и делает окно всегда поверх всех окон, только надо учитывать, что между такими окнами (например, Диспетчер Задач тоже всегда поверх всех окон) действуют те же правила перекрытия, что и между обычными. Панели инструментов Диспетчером Задач перекрываются.
ЗЫ: просто, в недавном посте про панели инструментов мне сказали, что делать надо вручную, вот я и сделала, последнее токо осталось - чтобы панели можно было окнами выносить, а эти окна, естественно, должны быть на переднем плане.
И вот скажи мне, нафига делать, чтоб окно панели было поверх всех окон?..
Достаточно, если это окно будет поверх всех окон твоего приложения, и все.
Как сделать не знаю точно, вроде
Хм... Интересно, а как сделать окошко, которое будет всегда поверх всех окон которые всегда поверх всех окон?
ЗЫ Люди, которые думают что они все знают, сильно раздражают нас - людей которые действительно все знают.
' Проект : OfflineClient
' Процедура : SetForegroundWindowEx
' Описание : Вывод окна на передний план
' Кем создан : SNE
' Дата-Время : 07.11.2004-19:05:49
'
' Параметры : hWnd - хэндл окошка
'--------------------------------------------------------------------------------
Public Function SetForegroundWindowEx(ByVal hwnd As Long) As Boolean
Dim MyThreadID As Long, ActiveThreadID As Long
MyThreadID = GetCurrentThreadId() ' Получениие ID нашего потока
ActiveThreadID = GetWindowThreadProcessId(GetForegroundWindow, cNull) ' Получение ID потока активного, в данный момент, окна
Call AttachThreadInput(MyThreadID, ActiveThreadID, vbNull) ' Присоединяемся к потоку окно которого, в данный момент, активно
Call SetForegroundWindow(hwnd) ' Теперь мы имеем полное право выйти из сумрака
Call AttachThreadInput(MyThreadID, ActiveThreadID, cNull) ' Более не имеет смысла держаться за поток чье окно БЫЛО активным
SetForegroundWindowEx = (GetForegroundWindow = hwnd)
End Function