Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Предательские апишки!!! :)))... :(((( Добавлено: 24.08.06 19:37  

Автор вопроса:  VβÐUηìt | Web-сайт: смекаешь.рф

Две апишки - BringWindowToTop и SetWindowPos - якобы предназначены для выставления окна поверх всех окон, точнее так оно и есть, но они выставляют поверх всех окон! Есть апишка для выставления окна всегда поверх всех окон?

Заранее благодарю.

Ответить

  Ответы Всего ответов: 19  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 24.08.06 20:02
А чем отличается поверх всех окон от всегда поверх всех окон?

Ответить

Номер ответа: 2
Автор ответа:
 FIX



ICQ: 348680795 

Вопросов: 39
Ответов: 62
 Профиль | | #2 Добавлено: 24.08.06 20:34
Я через таймер делал. По другому не знаю :(

Ответить

Номер ответа: 3
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #3 Добавлено: 24.08.06 20:57
Я через таймер делал. По другому не знаю :(

Прикинь, если другой прогарммист сделает точно также, что получится? :)

Ответить

Номер ответа: 4
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #4
Добавлено: 24.08.06 21:25
Есть апишка для выставления окна всегда поверх всех окон?

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

Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_SHOWWINDOW = &H40
Private Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE

Private Sub Form_Load()
Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
End Sub

Ответить

Номер ответа: 5
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #5 Добавлено: 25.08.06 01:54
Серёга, запусти то, что ты написал и диспетчер задач и сделай его окно активным.))

Ответить

Номер ответа: 6
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #6
Добавлено: 25.08.06 07:10
Серега, спасиб, конешно, но этот код делает окно поверх всех окон, а нужно, чтоб было всегда поверх всех окон. Разница в том, что поверх всех окон - окно просто выйдет на передний план и любое другое окно сможет его покрыть. А всегда поверх всех окон - даже если кликнуть на другом окне, то такое окно просто станет неактивным, но останется на переднем плане.

ЗЫ: просто, в недавном посте про панели инструментов мне сказали, что делать надо вручную, вот я и сделала, последнее токо осталось - чтобы панели можно было окнами выносить, а эти окна, естественно, должны быть на переднем плане.

JaG, если через таймер, то окно будет очень наглым и все время будет гопничать и отметать у других окон фокус, получится полная фегня...

Ответить

Номер ответа: 7
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 25.08.06 13:00
Серега, спасиб, конешно, но этот код делает окно поверх всех окон, а нужно, чтоб было всегда поверх всех окон. Разница в том, что поверх всех окон - окно просто выйдет на передний план и любое другое окно сможет его покрыть. А всегда поверх всех окон - даже если кликнуть на другом окне, то такое окно просто станет неактивным, но останется на переднем плане.

Этот код как раз и делает окно всегда поверх всех окон, только надо учитывать, что между такими окнами (например, Диспетчер Задач тоже всегда поверх всех окон) действуют те же правила перекрытия, что и между обычными. Панели инструментов Диспетчером Задач перекрываются.

Ответить

Номер ответа: 8
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #8
Добавлено: 25.08.06 14:00
Упс, дествитэльно, работает, извиняюсь, блин, просто в MegaFlash VB Help похожий код просто окно на передний план выводит...



Спасибо Серёге!

Ответить

Номер ответа: 9
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #9
Добавлено: 25.08.06 14:48
p.s. Но тогда вопрос - как элемент управления переместить с одной формы на другую?

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 25.08.06 16:04
ЗЫ: просто, в недавном посте про панели инструментов мне сказали, что делать надо вручную, вот я и сделала, последнее токо осталось - чтобы панели можно было окнами выносить, а эти окна, естественно, должны быть на переднем плане.

И вот скажи мне, нафига делать, чтоб окно панели было поверх всех окон?..
Достаточно, если это окно будет поверх всех окон твоего приложения, и все.
Как сделать не знаю точно, вроде
FormPanel.Show(frmMain)

Ответить

Номер ответа: 11
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #11 Добавлено: 25.08.06 17:13
Хм... Интересно, а как сделать окошко, которое будет всегда поверх всех окон которые всегда поверх всех окон?
ЗЫ Люди, которые думают что они все знают, сильно раздражают нас - людей которые действительно все знают.

Ответить

Номер ответа: 12
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #12
Добавлено: 25.08.06 19:03
Спасибо, блин, народ, но вопрос все-таки: как контрол с одной формы переместить на другую? Container не работает чё-то...

Ответить

Номер ответа: 13
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #13
Добавлено: 25.08.06 21:46
как контрол с одной формы переместить на другую?

Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Ответить

Номер ответа: 14
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #14
Добавлено: 27.08.06 13:50
' Проект     :  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

Ответить

Номер ответа: 15
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #15
Добавлено: 27.08.06 13:52
тьфу, VBD, не дочитал :) Но активным окошко делает точно, если еще закомбинить с HWND_TOPMOST, результат вероятно действительно станет.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам